OOP(面向对象编程)中的标识和平等之间有什么区别?
标识:一个变量与另一个变量具有相同的实例。
相等:两个不同的对象可以互换使用。它们通常具有相同的 ID。
例如:
Integer a = new Integer(1); Integer b = a;
a与 相同。b
a
b
在 Java 中,使用 来测试标识。例如。==if( a == b )
==
if( a == b )
Integer c = new Integer(1); Integer d = new Integer(1);
c等于 但不完全相同。d
c
d
当然,两个相同的变量总是相等的。
在Java中,平等由方法定义。请记住,如果实现 equals,则还必须实现 hashCode。equals
equals
标识确定两个对象是否共享相同的内存地址。相等性确定两个对象是否包含相同的状态。
如果两个对象相同,那么它们也是相等的,但仅仅因为两个对象相等,并不意味着它们共享相同的内存地址。
Strings有一个特例,但这偏离了主题,你需要问别人它是如何工作的;-)