如果有表达不对的地方望指正
==概念
- 在基本数据类型里比的是数据值
- 在引用数据类型里比的是地址值
如下例代码
String s1 = "a";
String s2 = "a";
System.out.println(s1 == s2)
若让两个字符串变量相等会返回true
为什么会返回true呢
通过hashCode来查看两个变量的hash码
System.out.println(s1.hashCode()); //97
System.out.println(s2.hashCode()); //97
可以发现两个字符串的hash码都为97,所以两个值相等
更新:
在字符串常量池中创建了一个a的值,当声明任何一个变量时,只要值相同都会返回true
但如果是创建一个新的字符串还会返回true吗,如下
String s1 = new String("a");
String s2 = "a";
System.out.println(s1 == s2) //true?false?
答案是false,为什么变量的值相同返回的却是false呢?
这是因为使用new关键字创建的对象和直接创建的对象的地址不同,new创建的对象在堆内存中创建出一个新的对象,直接创建的对象则是在字符串常量池中创建的,因此两个对象的地址不同则返回false。
如果两个都使用new关键字创建的对象会返回什么呢,如下
String s1 = new String("a");
String s2 = new String("a");
System.out.println(s1 == s2) //true?false?
当然还是false,因为使用new关键字创建的String对象储存的位置不同,即使值相同,内存的地址不同还是false。