java - 更改变量会影响间接变量(值与引用)

标签 java android eclipse

给出以下代码:

    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);
    }

我想做的是从中获取值(value)

mTiles[1][i].mPos

修改并设置

mTiles[0][i].mPos

问题出在这个语句

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

正在复制对象的引用,而不是对象的值。意思是,当我修改 pos.top 或 pos.bottom 时,原始对象也会被修改。

我猜我在这里缺少通过引用传递对象与值传递对象的概念......我认为我理解了。这里的修复是什么?我定义自定义类的方式有问题吗?

谢谢。

最佳答案

您需要一个临时 Rect 来更改值,并且仅分配值,而不是整个对象:

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);
}

关于java - 更改变量会影响间接变量(值与引用),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3799697/

相关文章:

java - 没有 synchronized 关键字的 ConcurrentHashMap

java - Android Wifi 响应太慢

android - 我如何在适配器中设置OnClickListener并从 fragment 访问?

java - 将 JSONObject 存储到变量中并将它们发送到另一个函数

Cygwin Gcc - 访问

java - LinkedDataSailGraph - 没有可用于 RDF 格式 JSON-LD 的解析器工厂

java - 如何将 admob 放置在不在屏幕顶部的位置(在 marmalade sdk 的 java 类中)

eclipse - Eclipse 中的部署目录在哪里?

java - 在java中运行脚本的有效方法

java - 在 Eclipse 中更改未处理的异常自动生成的捕获代码?