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