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

时间:2017-08-02 06:45:42

标签: java oop object

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

  

java中的对象具有三个基本属性: 状态 身份 < EM>行为 即可。对象的状态是来自它的值   数据类型。 对象的标识区分一个对象   另一即可。将对象的身份视为这个地方很有用   其值存储在内存中

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

2 个答案:

答案 0 :(得分:7)

假设你有这个简单的类:

class Example {
    private int value;

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

    public void showValue() {
        System.out.println(this.value);
    }
}

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

Example e1 = new Example(42);
Example e2 = new Example(42);

然后:

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

  • e1e2行为:一种方法showValue,它会将其值转储到控制台。 (请注意,它们不一定必须具有相同的行为:我们可以创建一个Example的子类,它与showValue做了不同的事[可能在流行音乐中显示了它-up对话框],并使e2成为该子类的实例。)

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

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

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

答案 1 :(得分:0)

我可以从C ++的两个例子中思考。

示例1:对象a和b不相同,因为它们不共享相同的内存。

Someclass a;
Someclass b;

示例2:对象a和b相同,因为它们指向同一对象。

Someclass c;
Someclass* a = &c;
Someclass* b = &c;