2013-03-21 92 views
-3

德亞所有,深層複製錯誤

我有以下幾點:

class test { 
    int x = 6; 
    int y = 7; 

    private int getX() { 
     return x; 
    } 

    private int getY() { 
     return y; 
    } 

    public test copy() { 
     test myTest = new test(); 
     myTest.x = getX(); 
     myTest.y = getY(); 
     return myTest; 
    } 
} 

然而,當我再執行:

test a = new test(); 
test b = a.copy(); 
b.x = 17; 
System.out.println(a.x); 

的結果仍是17。然而,不應該深拷貝防止這個?

任何人都可以幫助我嗎?

+1

爲我打印'6',包括原始代碼和修改代碼。 – iamnotmaynard 2013-03-21 22:11:40

+0

當你問「爲什麼我的代碼會執行X?」時,實際上它很難幫助你,事實上它不會執行X. – NPE 2013-03-21 22:16:14

回答

3

首先,你忽略了b.copy()在返回值:

test b = new test(); 
b.copy(); 

其次,我測試你的代碼,它打印6而不是17你在問題中說。

編輯我注意到你已經修復了第一個問題。但是,代碼仍然不像您所說的那樣行事。

+0

第三:這甚至不是深度複製;-) – ITroubs 2013-03-21 22:01:24

+0

@ITroubs :我想說一些關於這方面的知識,但後來認爲它很深*足夠*;) – NPE 2013-03-21 22:02:49

+0

是的,他對帖子所做的最後一次修改修正了錯誤,現在它返回了17個。它原本沒有相同的代碼。 – Marvo 2013-03-21 22:07:09

0

結果應該是6不是17.