可能重复:
等于和 == 之间的差异
在哪些情况下与操作员equals()
完全一样==
?
似乎他们俩的行为相似primitive data types
。是否还有其他任何情况下两者行为相同?
==
比较Object
类型的引用位,因此如果您引用相同的对象,情况就是如此
例如
Integer
对于值 -128 和 127(含),它会缓存(在自动装箱时)实例,因此这里提到的值范围就是这种情况Integer
对于原始数据类型,没有equals()
(因为它们不是对象,也没有方法)。
默认实现(在 Object 类中)equals()
只是进行对象身份检查(即与 相同==
)。因此,如果一个类不覆盖它,它将具有与==
.
运算符==
将始终比较对象的引用和原始类型的实际值。
请注意,原始数组 likeint[]
仍然是一个对象!
String test1 ="test";
String test2 = test1;
System.out.println(test1 == test2);
System.out.println(test1.equals(test2));
两者都会打印 -
真的
真的
除了原语(这是一种特殊情况)之外==
,equals()
对于引用相等与实际相等的每种情况,其行为相似:
Integer
引用(通常在 -128 和 +127 之间,但这是可配置的,并且取决于实例的构造方式)Object
(以及任何其他不覆盖的类equals()
)的实例显然,当有疑问时,使用equals()
该方法对比较equals()
进行评估。hashCode
While==
通过引用比较对象。