在哪种情况下equals()
与==
运算符完全相同?
它们似乎对primitive data types
的行为相似。还有其他两种情况都是平等的吗?
答案 0 :(得分:4)
==
比较Object
类型的引用位,因此如果您引用相同的Object,则情况就是这样
例如
Integer
对于值-128和127(包括)它缓存(同时自动装箱)实例,因此对于上面提到的Integer
答案 1 :(得分:3)
对于原始数据类型,没有equals()
(因为它们不是对象,没有方法)。
equals()
的默认实现(在类Object中)只进行对象标识检查(即与==
相同)。因此,如果某个类没有覆盖它,它将与==
具有相同的结果。
答案 2 :(得分:1)
运算符==
将始终比较对象的引用和基元类型的实际值。
请注意,像int[]
这样的基元数组仍然是一个对象!
答案 3 :(得分:1)
String test1 ="test";
String test2 = test1;
System.out.println(test1 == test2);
System.out.println(test1.equals(test2));
两者都会打印 -
真
真
答案 4 :(得分:1)
除了原语(这是一种特殊情况)之外,==
和equals()
对于引用相等与实际相等的每种情况都表现相似:
Integer
引用(通常介于-128和+127之间,但这是可配置的,它取决于实例的构造方式)Object
(以及任何其他未覆盖equals()
的类的实例)显然,如有疑问,请使用equals()
答案 5 :(得分:0)
equals()
方法评估hashCode
比较。虽然==
通过引用比较对象。