5

私が知っているように、+記号を使用して文字列を連結することは、多数の文字列がある場合にはお勧めできません。しかし、Eclipseで生成されたtoString()メソッドをチェックすると(ソースファイルをクリックして書き込み->ソース-> toString()を生成)、同じです。

public class Temp
 {
      private String tempName;
      private String tempValue;

      // here getters and setters

  /* (non-Javadoc)
         * @see java.lang.Object#toString()
  */
@Override
public String toString() {
    return "Temp [tempName=" + tempName + ", tempValue=" + tempValue + "]";
}

}

私の予想される toString() メソッドのように設定する場所はありますか?

   public String expectedToString(){
    StringBuffer sb = new StringBuffer();
    sb.append("Temp [tempName=").append(tempName).append(",").append(" tempValue=").append(tempValue).append("]");
    return sb.toString();
}

自動生成された toString() メソッドを使用して、オブジェクトの値をログに記録します。

親切にアドバイスしてください。

4

2 に答える 2

8

何も変更する必要はありません。コンパクトで読みやすいです。Temp.class を逆コンパイルすると、javac は実際の連結に StringBuilder を使用します。

public String toString() {
   return (new StringBuilder("Temp [tempName=")).append(tempName).append(", tempValue=").append(tempValue).append("]").toString();
}

しかし、他の状況では、

    String[] a = { "1", "2", "3" };
    String str = "";
    for (String s : a) {
        str += s; 
    }

+または+=実際のパフォーマンスキラーです。逆コンパイルされたコードを参照してください

String str = "";
for(int i = 0; i < j; i++) {
    String s = args1[i];
    str = (new StringBuilder(String.valueOf(str))).append(s).toString();
}

反復ごとに、新しい StringBuilder が作成され、次に String に変換されます。ここでは明示的に StringBuilder を使用する必要があります

    StringBuilder sb = new StringBuilder();
    for (String s : a) {
        sb.append(s); 
    }
    String str = sb.toString();
于 2012-12-30T05:18:59.093 に答える