2010-09-26 84 views
0

考慮下面的代碼:更改變量影響的間接變量(值VS參考)

Rect pos = new Rect(); 
    for (int i = 0; i < mCols; i++) { 
     pos = mTiles[1][i].getmPos(); 
     pos.top = pos.top - size; 
     pos.bottom = pos.bottom - size; 
     mTiles[0][i].setmPos(pos); 
    } 

我想要做的就是從

mTiles[1][i].mPos 

得到值修改它,並將它設置在

mTiles[0][i].mPos 

問題是這樣的說法

pos = mTiles[1][i].getmPos(); 

正在將引用複製到對象而不是對象的值。意思是,當我修改pos.top或pos.bottom時,原始對象被修改。

我猜我缺少一個傳遞對象的概念,通過引用vs值這裏...我認爲我理解。這裏的修復是什麼?我如何定義自定義類是否存在問題?

謝謝。

回答

1

如何

​​

+0

啊,真好。從來沒有想過這樣做。經過測試和工作。謝謝。 – user432209 2010-09-26 23:56:20

2

你需要一個臨時的矩形改變的價值觀,只有指定的值,而不是整個對象:

Rect pos; 
for (int i = 0; i < mCols; i++) { 
    pos = new Rect(); 
    pos.top = mTiles[1][i].getmPos().top - size; 
    pos.bottom = mTiles[1][i].getmPos().bottom - size; 
    mTiles[0][i].setmPos(pos); 
} 
+0

這不應該基於我的問題。也許我沒有解釋正確。 pos對象從未設置爲值,它被設置爲對象mTiles [0] [i] .mPos的引用。 – user432209 2010-09-26 20:41:30

+0

是的,我的錯誤,我只是編輯了我的答案,因爲我意識到發生了什麼...仍然不是100%確定它是否會工作:$ – Jaymz 2010-09-26 20:42:48

+0

好的,我看到你編輯了。是的,正確的,我需要賦值而不是引用......所以我怎麼做到這一點,而不必編碼每一個.bottom,.top,.left和.right?現在嘗試你的解決方案。 – user432209 2010-09-26 20:44:52