今天遇到很好玩的错误
代码如下
public class java12 {
public static void main(String[] args) {
String a = new String("123");
a.intern();
String b = "123";
System.out.println(a);
System.out.println(a==b);
}
}
public class java12 {
public static void main(String[] args) {
String a = new String("123").intern();
String b = "123";
System.out.println(a==b);
}
}
这两个结果一样嘛?
结果是不一样的
第一个是false第二个是true。首先点intern确实是回返回字符串在字符串常量池的地址。但是第一个没有进行赋值。也就是a仍然指向堆中的对象,并没有指向字符串常量池中。只有进行了赋值才可以一样
第一个改成 a = a.intern即可