2个对对象的引用==彼此吗?

Are 2 references to an object == to each other?

我有一个方法 move(xSteps, ySteps),它根据方法上的参数通过增加或减少 x 和 y 来移动它。

但是当 xSteps 和 ySteps 都为 0 时,我想将移动的点(实际上并没有移动)存储在与原始点相同的内存位置,因为 x 和 y 值应该相同。

移动方法如下

public Point move(int xSteps, int ySteps) {
    Point p;
    Point p2;
    if (xSteps == 0 && ySteps == 0) {
        p = new Point(x, y);
        p2 = p
        return p2;
    } else {
        p2 = new Point(x + xSteps, y + ySteps);
    }
    return p2;
}

然而当我运行这个测试时,

moved = point.move(0,0);

        Assertions.assertTrue(p == moved);

它returns假的,但它应该是真的。为什么会这样?

== 检查对象 pmoved 是否是同一个对象。由于您创建了一个新对象 (p = new Point),moved 将不是同一个对象,即使它具有相同的值。

如果要比较值,可以使用equals()。 所以:Assertions.assertTrue( p.equals(moved) );

p == moved 测试 pmoved 是否引用同一个对象。

由于 move() 方法总是 returns new Point() 此测试将因您当前实施的 move() 方法而失败。

如果您想要将移动的点(实际上并未移动)存储在与原始点相同的内存位置,那么您需要将移动方法更改为

public Point move(int xSteps, int ySteps) {
    if (xSteps == 0 && ySteps == 0) {
        return this;
    } else {
        return new Point(x + xSteps, y + ySteps);
    }
}