String問題

886 ワード

public class C{

public static void main(String[] arg){

String s1 = "abc";
String s2 = new String("abc");
String s3 = new String("abc").intern();
String s4 = "ab"+"c";
System.out.println(s1==s2);
System.out.println(s1==s3);
System.out.println(s1==s4);
System.out.println(s2==s3);

}

}

問出力は何ですか.
JDK 1を使います.6とJDK 1.8 Cmdでjavacとjavaコマンドで実行した結果はfalse true true falseである.
ここにはあまり現れないStringが現れた.intern()メソッド.この方法はどういう意味ですか.APIを表示すると、JVMが文字列キャッシュプールに存在する文字列参照を返す方法が返されることがわかります.
だから、「abc」==new String(「abc」).intern()
ではなぜ「abc」=「ab」+「c」;
このクラスを逆コンパイルツールで逆コンパイルすると、コンパイルされたclassファイルにString s 4=「abc」が変化していることがわかり、元のコンパイラはコンパイル中に「ab」+「c」を「abc」にコンパイルしていた.つまり、コンパイラはコードを最適化します.