class A {
String s4 = "abc";
static public void main(String[]args ) {
String s1 = "abc";
String s2 = "abc";
String s3 = new String("abc");
A o = new A();
String s5 = new String("def");
System.out.println("s1==s2 : " + (s1==s2));
System.out.println("s1==s1.intern : " + (s1==s1.intern()));
System.out.println("s1==s3 : " + (s1==s3));
System.out.println("s1.intern==s3.intern : " + (s1.intern()==s3.intern()));
System.out.println("s1==s4 : " + (s1==o.s4));
}
}
出力:
s1==s2 : true
s1==s1.intern : true
s1==s3 : false
s1.intern==s3.intern : true
s1==s4 : true
私の質問:
1.どうなり"String s1 = "abc"
ますか?Stringオブジェクトは、文字列クラスのプールにインターン文字列として追加されていると思いますか?それはどこに置かれますか?「永続的な生成」または単にヒープ(文字列クラスインスタンスのデータメンバーとして)?
2.どうなり"String s2 = "abc"
ますか?オブジェクトは作成されていないと思いますが、これはJava Intepreterがすべてのインターン文字列を検索する必要があることを意味しますか?これによりパフォーマンスの問題が発生しますか?
3.String s3 = new String("abc")
インターン文字列を使用していないようです。なぜですか?
4.String s5 = new String("def")
新しいインターン文字列を作成しますか?