参考网络+ 加上自己的: ‘ == ’ 操作符是用来比较2个变量的值是否相等;也就是比较变量所对应的内存中所存取的数值是否相同;
基本数据类型只能使用 == 操作符;
如果一个变量指向的数据是对象,如:Object obj = new Object(); 变量 obj是一个内存,new Object()是另一个内存,
变量obj中存储的是对象占用的那块内存的首地址;
对象类型的变量,要比较2个变量是否指向同一个对象,既要看这2个变量所对应的内存中的数值是否相等,用 == ;
‘equals’ 用于比较2个独立对象的内容是否相同,如果一个类没有重写equals方法,将继承Object的equals方法,
此时比较的就是2个变量是否指向同一个对象,此时 equals和==返回相同的结果;
实质:"=="和"!="比较的是地址.也可认为"=="和"!="比较的是对象句柄;而equals()比较的是对象内容.
或者说,"=="和"!="比较的 是"栈"中的内容,而equals()比较的是"堆"中的内容.
@Test
public void testEuqals() {
String str = "we have the technology";
String str2 = "we have the technology";
Assert.assertTrue(str.equals(str2));
Assert.assertTrue(str == str2); // 不推荐使用 == 比字符串
String c = "we have";
c += " the technology"; // 将生成新的 String 对象
Assert.assertTrue(str.equals(c));
Assert.assertFalse(str == c); // str 与 c是存在不同的内存位置
}
|