我注意到你不能像这样比较 2 点:
if (pointOne == pointTwo) { }
我总是必须这样做:
if (pointOne.x == pointTwo.x && pointOne.y == pointTwo.y) { }
我真的很想知道为什么你不能使用第一个例子,有人有答案吗?
我注意到你不能像这样比较 2 点:
if (pointOne == pointTwo) { }
我总是必须这样做:
if (pointOne.x == pointTwo.x && pointOne.y == pointTwo.y) { }
我真的很想知道为什么你不能使用第一个例子,有人有答案吗?
您必须使用equals
class 的方法Point
。检查这个。
如果你使用 == 你实际上在做的是检查两个Point
对象的内存地址是否相同。
在 Java 中,所有类都派生自Object
,并且您可以覆盖该equals
方法,从而提供一种方便的方法来检查同一Object
派生类的两个对象是否相同。
==
运算符检查是否指向同一个对象的两个引用。
你应该使用对象equals
的方法Point
-
pointOne.equals(pointTwo);
确定两点是否相等。如果表示它们在坐标空间中的位置的 x 和 y 成员字段的值相同,则 Point2D 的两个实例是相等的。
因为Point是引用,如果需要使用equals,需要重写equal方法。Java 不支持像“==”这样的覆盖运算符。
那么这将是一个对象比较。如果您使用 == 进行比较,您将比较内存位置。
您可以覆盖并调用 Equals。
我假设pointOne
并且pointTwo
是某个类的对象?您不能在 Java 中重载运算符,这就是您必须比较字段的原因。在这种情况下,为您的类重写 equals 方法并以这种方式使用它是一个很好的做法:
PointOne.equals(PointTwo)
您可以使用第一个示例,因为运行 pointOne.x == pointTwo.x
比较 == 运算符能够处理的原始类型(int)。
当您运行时,pointOne == pointTwo
您正在比较 Point 对象引用,但它们不是。
正如其他人所说,您可以使用pointOne.equals(pointTwo)