2017-05-30 53 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

相關問題