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