OOP 中的标识和平等之间有什么区别?身份平等

2022-09-01 06:28:05

OOP(面向对象编程)中的标识和平等之间有什么区别?


答案 1
  • 标识:一个变量与另一个变量具有相同的实例。

  • 相等:两个不同的对象可以互换使用。它们通常具有相同的 ID。

身份

例如:

Integer a = new Integer(1);
Integer b = a;

a与 相同。b

在 Java 中,使用 来测试标识。例如。==if( a == b )

平等

Integer c =  new Integer(1);
Integer d = new Integer(1);

c等于 但不完全相同。d

当然,两个相同的变量总是相等的。

在Java中,平等由方法定义。请记住,如果实现 equals,则还必须实现 hashCodeequals


答案 2

标识确定两个对象是否共享相同的内存地址。相等性确定两个对象是否包含相同的状态。

如果两个对象相同,那么它们也是相等的,但仅仅因为两个对象相等,并不意味着它们共享相同的内存地址。

Strings有一个特例,但这偏离了主题,你需要问别人它是如何工作的;-)