0

質問1:

このコードでは、作成される文字列オブジェクトは 1 つだけですか、それとも 1 つの文字列オブジェクトと 5 つの文字列リテラル ( 、"abc""xyz""abcxyz")ですか?"123""abcxyz123"

StringBuilder s1 = new StringBuilder("abc"+"xyz"+"123");  

質問2:

この別のケースでは、作成される文字列オブジェクトは 1 つだけですか?

 StringBuilder s2 = new StringBuilder();  
       s2.append("abc");  
       s2.append("xyz");  
       s2.append("123"); 
4

1 に答える 1

0

文字列は不変であるため、+2 つの文字列で演算子を使用すると、連結された新しい文字列オブジェクトが作成されます。文字列プールは最適化として機能するため、文字列が含まれている場合、新しいものを作成する代わりに参照が返されます。

intern()String オブジェクトがまだ含まれていない場合、このメソッドは String オブジェクトをプールに追加します。文字列リテラルは常に internedであるため、両方の質問で同じ数の参照を作成し、それらを文字列プールに追加します (コンストラクターまたは引数として使用)。

文字列オブジェクトを作成する場合は異なることに注意してください。 を使用するs = new String("foo");と、新しい参照が作成されるため、その場合、文字列オブジェクトは を呼び出すまで文字列プールに存在しませんs.intent()

于 2013-02-14T20:06:00.717 に答える