比较2分 - java

时间:2013-10-31 15:22:25

标签: java

我注意到你无法像这样比较2点:

if (pointOne == pointTwo) { }

我总是这样做:

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

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

6 个答案:

答案 0 :(得分:9)

您必须使用班级equals的{​​{1}}方法。检查this

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

在Java中,所有类都派生自Point,您可以覆盖Object方法,提供一种方便的方法来检查实际上是否有两个相同equals派生的对象上课,都是一样的。

答案 1 :(得分:4)

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

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

pointOne.equals(pointTwo);
  

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

Documentation

答案 2 :(得分:1)

因为Point是引用,并且如果需要使用equals,则需要覆盖等于的方法。 Java doest不支持覆盖运算符,如“==”。

答案 3 :(得分:0)

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

你可以覆盖并调用Equals。

答案 4 :(得分:0)

我认为pointOnepointTwo是某类的对象?你不能在java中重载运算符,这就是你必须比较字段的原因。 在这种情况下,覆盖类的equals方法并以这种方式使用它是一个很好的方法:

PointOne.equals(PointTwo)

答案 5 :(得分:0)

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

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

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