Q1:
String s1 = new String(“aa”);
String s2 = “aa”;
//s1==s2为false
是因为s1指向的是堆中的对象,而s2指向的是常量池中的"aa"吗?
Q2:
String s1 = new String(“a”) + new String(“a”);
String s2 = “aa”;
//s1==s2为false
是因为s1指向的是堆中的"aa"对象,而s2是指向的是常量池中的"aa"吗?
Q3: JDK6和JDK6+中intern()方法的区别, 可以这样理解吗?
JDK6: 对于某个字符串对象,如果之前在常量池中已存在该对象,执行intern()方法返回的是该对象在常量池中的副本。若不存在,则创建该字符串对象的副本,放入常量池中并返回。
JDK6+: 对于某个字符串对象,如果之前在常量池中已存在该对象,执行intern()方法返回的是该对象在常量池中的引用。若不存在,则在堆中寻找该对象的引用,找到就返回;找不到就在堆中创建该字符串对象,并将其引用放入常量池,然后返回。