|
问题一:
String a="abc";,这行代码被执行的时候,JAVA虚拟机首先在字符串常量池中查找是否已经存在了值为"abc"的这么一个对象,它的判断依据是String类equals(Object obj)方法的返回值。如果有,则不再创建新的对象,直接返回已存在对象的引用;如果没有,则先创建这个对象,然后把它加入到字符串池中,再将它的引用返回。
String d = "ab" + "cd";
// 如果d和c指向了同一个对象,则说明d也被加入了字符串池
if (d == c) {
System.out.println(""ab"+"cd" 创建的对象 "加入了" 字符串池中");
分析:
String d = "ab" + "cd"; 编译后等价于 String d = "abcd";(此文有)
d.equals(c)==>true==>说明字符串常量池中有==>没创建新对象==>无所谓加入字符串常量池了吧?
问题二:
StringInternTest类,
// 使用char数组来初始化a,避免在a被创建之前字符串池中已经存在了值为"abcd"的对象
1:String a = new String(new char[] { 'a', 'b', 'c', 'd' });
2:String b = a.intern();
分析:
第1:行创建了新对象引用赋予a,但没有放入字符串常量池,
所以在第2:行intern()从池中没查找到.又创建了新对象引用赋予b,
==>b==a?false 分析是否正确? |
|