0

重複の可能性:
Javaの「テキスト」と新しい文字列(「テキスト」)の違いは何ですか?

次の2つのステートメントの簡潔で詳細な違いを説明してください。

String a= "somevalue";
String b = new String("somevalue");

b2番目のステートメントがヒープ内の文字列オブジェクトにメモリを作成して提供することを知っています。しかし、なぜオブジェクトaはメモリを取得せず、文字列メソッドでの操作が許可されているのですか。

4

2 に答える 2

3

aおよびbはオブジェクトへの参照であり、オブジェクトへの参照ではありません。

a = b;オブジェクトをコピーしない場合は、オブジェクトへの参照がコピーされます。

文字列のchar[]中には別のオブジェクトである文字列があります。

a既存のオブジェクトへの参照を取得するため、追加のメモリは必要ありません。

bより多くのメモリを必要とするように、新しく作成されたオブジェクトへの参照を取得します。

それでも文字列メソッドを操作できます。

これは、オブジェクトがどのように作成されたかとは関係ありません。

于 2012-09-06T09:42:20.807 に答える
3

1つ目は、変数へのリテラル文字列オブジェクト「somvalue」に影響しますa。このリテラル文字列オブジェクトは、すべてのリテラル文字列と同様にプールにキャッシュされます。

2つ目は、空の文字列の新しいインスタンスを作成します。String b = "";Stringインスタンスは不変であるため、新しいオブジェクトを無料でインスタンス化することを除いて、と同等です。

于 2012-09-06T09:42:43.750 に答える