string类型对象的指向问题
先创建三个String对象
public class Test02 {
public static void main(String[] args) {
String s1 = "abcd";
String s2 = new String("abcd");
String s3 = "abcd";
String s4 = new String("abcd");
}
}
接下来我们来做下判断
System.out.println(s1 == s3);//true
System.out.println(s1 == s2);//false
System.out.println(s2 == s4);//false
那么问题来了:
为什么会出现这种情况呢?是不是大家很疑惑,没错,我最开始也很纳闷,按照我们的想法,这三个都应该为true才对呀
真相只有一个,请看下图:
因为引用类型==比较的是地址,s2,s4都new了一下,所以他们两哥们分别指向堆里面不同的地址;s1,s3他俩这种创建方式是指向常量池里的地址,常量池里面相同内容是同一个地址的
所以应该这样:
System.out.println(s1.equals(s2));//true
System.out.println(s2.equals(s4));//true
equals比较的是内容,他们内容相同,所以相等,所以这才为true