Java - 与另一个对象相等的对象的行为

时间:2017-05-30 15:27:16

标签: java object

我遇到了Java问题。这是代码:

class Nmb {

private int value ;

public Nmb ( int value ) {
    this.value = value ;
}

public Nmb (Nmb number ) {
    value = number.value ;
}

public void duplicate ( ) {
    value = 2*value ;
}

public String  toString ( ) {
    return "" + value ;

}
public static void main ( String [ ] args ) {
    Nmb a = new Nmb ( 3 ) ;
    Nmb b = new Nmb ( a ) ;
    Nmb c = b ;
    a.duplicate ( ) ;
    b.duplicate();
    c.duplicate();
    System.out.println ( a + "," + b + ","+ c ) ;

}
}

输出结果为:6,12,12

我做了一些测试,我看到b和c在执行c.duplicate时取值12。为什么会这样?为什么c.duplicate会调用对象b?当创建该对象时,不应该具有b(3)的值,并且当调用重复方法并且结果为6,6,6时,不应该使用3吗?对象c将始终与对象b连接,而值1将始终取决于另一个的值?

谢谢

1 个答案:

答案 0 :(得分:1)

这是因为c是与b相同的对象的引用,所以这些都是指向同一个对象的引用

您要将b分配给c(即您实际创建的是引用,而不是新对象):

Nmb c = b ;

因此,执行c.duplicate()将适用于bc

更清楚地说明:

                      ______________
  b (reference)  ->  |              |
                     |  Num object  |
  c (reference)  ->  |______________|