代码之家  ›  专栏  ›  技术社区  ›  user432209

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

  •  0
  • user432209  · 技术社区  · 14 年前

    给出以下代码:

        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时,原始对象会被修改。

    我猜我这里缺少了一个“通过引用传递对象”和“值”的概念……我认为我理解。这里的解决方法是什么?我如何定义自定义类有问题吗?

    谢谢。

    2 回复  |  直到 14 年前
        1
  •  1
  •   juell    14 年前

    怎么样

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

    ?

        2
  •  2
  •   Jaymz    14 年前

    您需要一个临时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);
    }