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假的,但它应该是真的。为什么会这样?
==
检查对象 p 和 moved 是否是同一个对象。由于您创建了一个新对象 (p = new Point
),moved 将不是同一个对象,即使它具有相同的值。
如果要比较值,可以使用equals()。
所以:Assertions.assertTrue( p.equals(moved) );
p == moved
测试 p
和 moved
是否引用同一个对象。
由于 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);
}
}
我有一个方法 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假的,但它应该是真的。为什么会这样?
==
检查对象 p 和 moved 是否是同一个对象。由于您创建了一个新对象 (p = new Point
),moved 将不是同一个对象,即使它具有相同的值。
如果要比较值,可以使用equals()。
所以:Assertions.assertTrue( p.equals(moved) );
p == moved
测试 p
和 moved
是否引用同一个对象。
由于 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);
}
}