对象标识在java中意味着什么?

dan*_*iri 4 java oop object

我正在阅读我在这个短语中遇到的java语言编程中的"数据抽象":

java中的对象具有三个基本属性:状态,身份行为.对象的状态是其数据类型的值.对象的标识将一个对象与另一个对象区分开来.将对象的标识视为其值存储在内存中的位置很有用.

每个人都可以更具体地解释什么是身份?

T.J*_*der 8

假设你有这个简单的类:

class Example {
    private int value;

    Example(int v) {
        this.value = v;
    }

    public void showValue() {
        System.out.println(this.value);
    }
}
Run Code Online (Sandbox Code Playgroud)

我们有这个代码(例如,在其他地方的方法中):

Example e1 = new Example(42);
Example e2 = new Example(42);
Run Code Online (Sandbox Code Playgroud)

然后:

  • e1e2(他们的value成员).在这种情况下,它们都具有相同的状态(42).

  • e1并且e2行为:一种showValue将其值转储到控制台的方法.(请注意,它们不一定必须具有相同的行为:我们可以创建一个子类,Example使用showValue[可能在弹出的对话框中显示它] 做了不同的事情,并改为创建该子类e2的实例.)

  • e1e2身份:表达e1 == e2false; 它们不是同一个对象.他们每个人都有独特的身份.它们可能是等价的对象(我们可以实现equals并且hashCode它们被认为是等价的),但它们永远不会具有相同的身份.

没有任何对象具有与另一个对象相同的身份; 在运行进程的内存中保证对象的标识是唯一的.

(它们还有其他特征,例如它们的类型,但那些是主要的三种.)