62,620
社区成员
发帖
与我相关
我的任务
分享

但我还是有点不明白,在类结束之前不会被回收的话,那么如果在类A里往字符串常量池里加了一个"hello",那么在另外一个类B里执行语句String str = new String(“hello"),这时候就有可能之前的字符串常量池中的hello已经被回收了对么?
public class test16 {
public static void main(String[] args) {
// TODO Auto-generated method stub
String str1 = new String("hello");
String str2 = new String("hello").intern();
String str3 = "hello";
System.out.println(str1 == str2);
System.out.println(str2 == str3);
System.out.println(str1 == str3);
}
}
运行结果:
false
true
false
因为String str = new String("hello"); str的指向是内存栈中的hello存储地址,字符串常量池中产生的hello是过程量,随时可以能被jvm回收。而String str = new String("hello").intern(); str被指向常量池中的hello地址等价于String str = "hello"; 这个我在3楼时已经说过了,所以2者还是有区别的。