2017-05-30 70 views
0

我有一个Java问题。这是代码: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取12的值被执行时c.duplicate 。为什么会发生?为什么c.duplicate调用对象b?在创建对象时,不应该具有b(3)的值,并且在使用6,6,6的结果调用重复方法时使用3的值?对象c将始终与对象b连接,而对象的值将始终取决于对象的值。

谢谢

+1

'B'和'C'不是两个相等的对象。他们是同一个对象。这就是'c = b'所做的。 – khelwood

+0

是不是C指向与B相同的参考? –

+0

将变量看作可放置在对象上的标签。您已将同一个对象标记为“b”和“c”,因此它们始终显示相同的值应该不足为奇。 – biziclop

回答

1

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

这里你分配到bc(即,实际上创建一个参考,并不是一个新的对象):

Nmb c = b ; 

所以,executuing c.duplicate()才能既为bc工作。

为了更清楚:

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

从技术上讲,'c'不是对'b'的引用。 “c”是对“b”所指的同一对象的引用。这两个引用的对象都没有“名称”,这使得描述变得困难,所以你所说的话可以被认为是正确的,但在技术上是错误的。 – Andreas

相关问题