1

我有两个问题:

  1. 如果我有以下代码:

    private boolean handleCollision(Rectangle_Double test)
    {
        Rectangle_Double s = test;
        s.setLocation(s.X+xVelocity, s.Y);
    }
    

我在修改传入的 Rectangle_Double 吗?如果是这样,复制传入的 Rectangle_Double 并修改它的最佳方法是什么?

其次,如果我要像这样在 python 中编写代码:

def handleCollision(collidedLands, testRectangle)
    s = testRectangle
    s.setLocation(s.X+xVelocity, s.Y)

我在修改传入的 testRectangle 吗?如果是这样,复制传入的 testRectangle 并修改它的最佳方法是什么?

谢谢!

4

2 回答 2

2

我不会说 Java,但要回答 Python 问题:

  1. 是的,您正在修改 testRectangle。

  2. 如果您不想修改它,请创建一个新矩形并将其返回。

像这样,假设你有一个矩形的构造函数:

def handleCollision(collidedLands, testRectangle):
    newRectangle = Rectangle(testRectangle.X + xVelocity, testRectangle.Y)
    return newRectangle
于 2012-11-06T06:42:59.060 回答
2

Python 和 Java 都只能按值传递。Python 中的每个值都是一个引用,就像在 Java 中每个非原始值都是一个引用一样。在这两种语言中,对象都不是值。它们的传递和引用语义几乎相同,无论您选择如何称呼它们。

因此,您的 Java 代码:

private void handleCollision(Rectangle_Double test)
{
    Rectangle_Double s = test;
    s.setLocation(s.X+xVelocity, s.Y);
}

与等效的 Python 代码相同:

def handleCollision(self, test):
    s = test
    s.setLocation(s.X+xVelocity, s.Y)

正如我之前所说,对象在任何一种语言中都不是值。在这两种情况下传递的值都是引用(指向对象的指针)。Python 和 Java 中的所有对象都必须通过引用进行操作。像所有类型一样,引用是按值传递的。

于 2012-11-06T10:10:39.810 回答