ringa_lee2017-04-18 10:48:45
リーリー
ここでの A と "abc" は 2 つのオブジェクトです。インターン メソッドが呼び出されるとき、文字定数プールにはすでにこのオブジェクトと等しい文字列が含まれているため、 b="abc" が続いても、インターン メソッドの呼び出しは役に立ちません。 b と a は同じオブジェクトではありません。
出力を同等にしたい場合は、最初の文は次のようになります:
リーリーまたは 2 番目の文は次のようになります:
リーリーPHP中文网2017-04-18 10:48:45
最初に知っておく必要があるのは、== 演算は 2 つのオブジェクトまたは基本型 a と b が同じメモリ領域を指しているかどうかを決定するということです
String の基礎となる実装は
private Final value[] です。
String がインスタンス化されると、実際には連続メモリを分割して、System.arraycopy を通じて char 配列を保存します。
new String("abc") は、実際にはこの方法で String を初期化することはお勧めできません。実際の実装には、a = "abc" よりも 1 つ多くの手順が必要です。基本的な手順は次のとおりです。
リーリー
実際、実行される操作は上記の 3 番目のステップ、つまり b = a;String b = "abc"実際の基礎となる実装は次のとおりです:
文字列のソースコード分析を一度見てみることをお勧めします
[JAVAソースコード分析 - Java.lang] 文字列ソースコード分析