Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/220.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 更改变量会影响间接变量(值与参考值)_Java_Android_Eclipse - Fatal编程技术网

Java 更改变量会影响间接变量(值与参考值)

Java 更改变量会影响间接变量(值与参考值),java,android,eclipse,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); } 修改它,并将其设置为 mTiles[0]

给定以下代码:

    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[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);
}
Rect-pos;
对于(int i=0;i
您需要一个临时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);
}
Rect-pos;
对于(int i=0;i
怎么样

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

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

基于我的问题,这不应该起作用。也许我解释得不对。pos对象从未设置为值,它被设置为对对象mTiles[0][i].mPos的引用。是的,我错了,我刚刚编辑了答案,因为我意识到发生了什么。。。但仍然不能100%确定它是否能工作:$OK,我看到你被编辑了。是的,正确,我需要分配值而不是引用…那么我如何在不必对每个.bottom、.top、.left和.right进行编码的情况下实现这一点呢?现在尝试你的解决方案。是的,它有效。谢谢我只是对必须修改Rect(也称为Rect.top/Rect.bottom)的每个属性感到沮丧。为什么我不能复制整个Rect的值。基于我的问题,这不应该起作用。也许我解释得不对。pos对象从未设置为值,它被设置为对对象mTiles[0][i].mPos的引用。是的,我错了,我刚刚编辑了答案,因为我意识到发生了什么。。。但仍然不能100%确定它是否能工作:$OK,我看到你被编辑了。是的,正确,我需要分配值而不是引用…那么我如何在不必对每个.bottom、.top、.left和.right进行编码的情况下实现这一点呢?现在尝试你的解决方案。是的,它有效。谢谢我只是对必须修改Rect(也称为Rect.top/Rect.bottom)的每个属性感到沮丧。为什么我不能复制整个矩形的值。啊,太好了。我从来没想过那样做。测试和工作。谢谢。啊,很好。我从来没想过那样做。测试和工作。谢谢