1

我注意到你不能像这样比较 2 点:

if (pointOne == pointTwo) { }

我总是必须这样做:

if (pointOne.x == pointTwo.x && pointOne.y == pointTwo.y) { }

我真的很想知道为什么你不能使用第一个例子,有人有答案吗?

4

6 回答 6

10

您必须使用equalsclass 的方法Point。检查这个

如果你使用 == 你实际上在做的是检查两个Point对象的内存地址是否相同。

在 Java 中,所有类都派生自Object,并且您可以覆盖该equals方法,从而提供一种方便的方法来检查同一Object派生类的两个对象是否相同。

于 2013-10-31T15:24:25.833 回答
4

==运算符检查是否指向同一个对象的两个引用。

你应该使用对象equals的方法Point-

pointOne.equals(pointTwo);

确定两点是否相等。如果表示它们在坐标空间中的位置的 x 和 y 成员字段的值相同,则 Point2D 的两个实例是相等的。

文档

于 2013-10-31T15:24:57.850 回答
1

因为Point是引用,如果需要使用equals,需要重写equal方法。Java 不支持像“==”这样的覆盖运算符。

于 2013-10-31T15:26:33.563 回答
0

那么这将是一个对象比较。如果您使用 == 进行比较,您将比较内存位置。

您可以覆盖并调用 Equals。

于 2013-10-31T15:23:42.893 回答
0

我假设pointOne并且pointTwo是某个类的对象?您不能在 Java 中重载运算符,这就是您必须比较字段的原因。在这种情况下,为您的类重写 equals 方法并以这种方式使用它是一个很好的做法:

PointOne.equals(PointTwo)
于 2013-10-31T15:27:25.877 回答
0

您可以使用第一个示例,因为运行 pointOne.x == pointTwo.x比较 == 运算符能够处理的原始类型(int)。

当您运行时,pointOne == pointTwo您正在比较 Point 对象引用,但它们不是。

正如其他人所说,您可以使用pointOne.equals(pointTwo)

于 2013-10-31T16:40:18.863 回答