可能性の重複:
String object creation using new and its comparison with intern method同じjava文字列が同じアドレスを使用するのはなぜですか?
私はより多くのそれらを理解するために文字列で遊んでいたと私は私が説明できない何かに気づいた:
String str1 = "whatever";
String str2 = str1;
String str3 = "whatever";
System.out.println(str1==str2); //prints true...that's normal, they point to the same object
System.out.println(str1==str3); //gives true..how's that possible ?
どのようにされました最後の行は本当ですか?これは、str1とstr3の両方がメモリ内の同じアドレスを持つことを意味します。
これはコンパイルの最適化で、文字列リテラルが同じであること(「whatever」)が検出され、str1とstr3が同じオブジェクトに割り当てられていることを検出できるかどうかです。あるいは、私は文字列の基本的な仕組みに何かを見逃していますか?
javacコンパイラは、このような単純なケースを検出して、文字列のスペースを1回だけ割り当てて再利用することができます。実行時には別の話です。 – nhahtdh
http://stackoverflow.com/a/513839/1273830> "これらのリテラルはコンパイラによってインターンされているため、同じオブジェクトを参照しているためです!" – Prasanth