0

Java に完全に空の文字列プールがあり、次の操作を行った場合、文字列オブジェクト 'Hello' が文字列プールに追加されますか?

String myStr = new String('Hello');

new String('Hello'); への後続の呼び出しを知っています。新しい文字列オブジェクトを作成しますが、プールには追加しませんが、'Hello' がまだプールにない場合はどうなるでしょうか?

編集: 基本的に、次の出力が false である理由を知る必要があります。

String myStr = new String("Hello");
print(myStr=="Hello");

If, first call, new String("Hello"); Hello をプールに追加します。次に、比較コードで、プール常駐オブジェクト 'Hello' をリテラル 'Hello' (== の右側) と比較しています。したがって、== の左側は右側と同じ (プール内の) オブジェクトを指しているのではないでしょうか?

4

4 に答える 4

0

はいといいえ。クラスのどこかにリテラル「Hello」がある場合、クラスがロードされるとき(コードが実行される前)に文字列プールに追加されます。

Stringただし、次に、文字列プールにないの新しいインスタンスを作成します。

だから"Hello" != new String("Hello")、しかし"Hello" == new String("Hello").intern()

つまりnew String("Hello")、この新しいインスタンスはすでに存在するため、文字列プールに追加することはできません"Hello"

またnew String(String s)、文字列を文字列プールに追加しません。たとえば、ユーザー入力を文字列プールに追加すると便利なのはなぜですか?

于 2013-03-05T15:55:31.943 に答える
0

以下の投稿をご覧ください。あなたにとってベストな答えが返ってくると思います

Javaの文字列プールとは?

どうも

于 2013-03-05T15:32:59.657 に答える
0

クラスが含まれている場合、「Hello」が文字列プールに追加されます。

String myStr = new String("Hello");

ロードされます。new String() はヒープ上のオブジェクトになり、その内部の char 配列はプール内の char 配列を指します。new String("Hello") ではなく、"Hello" をプールに入れるクラスローダ

于 2013-03-05T15:44:00.647 に答える
0

Java では、'==' 演算子は、プリミティブ データ型で使用されていない場合、オブジェクト自体の内容ではなく、オブジェクトの参照をチェックするために使用されます。したがって、あなたの場合、myStr と "Hello" はメモリ内の 2 つの異なるオブジェクトであるため、false が返されます。一方、オブジェクトの内容を比較したい場合は equals() メソッドを使用します。

print(myStr.equals("Hello")); このステートメントは true を返します。

于 2013-03-05T16:47:50.360 に答える