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对象将作为一个interned字符串添加到String类的池中。它被放在哪里?是"permanent generation"还是只是堆(作为String类实例的数据成员)?
2.对于"String s2 = "abc"
会发生什么?我猜想不会创建任何对象。但这是否意味着Java解释器需要搜索所有interned字符串?这会导致性能问题吗?
3.似乎String s3 = new String("abc")
不使用interned字符串。为什么?
4.String s5 = new String("def")
会创建任何新的interned字符串吗?