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