java - 我可以使用 == 运算符来比较 Java 中的 Point 对象吗?

标签 java object-comparison object-identity

当我正在解决“破解编码面试”一书中的问题时...... 我有疑问。问题是:

给定二维平面上的两个正方形,找到一条将这两个正方形相交的直线 正方形减半。

解:任何一条通过矩形中心的线都必须把它切成两半。因此,如果你画 一条连接两个正方形中心的线,它将把两个正方形切成两半。

   public class Square {
       public double left;
       public double top;
       public double bottom;
       public double right;
       public Square(double left, double top, double size) {
              this.left = left;
              this.top = top;
              this.bottom = top + size;
              this.right = left + size;
       }

       public Point middle() {
              return new Point((this.left + this.right) / 2,
                                           (this.top + this.bottom) / 2);
       }

       public Line cut(Square other) {
              Point middle_s = this.middle();
              Point middle_t = other.middle();
              if (middle_s == middle_t) {
                     return new Line(new Point(left, top),
                     new Point(right, bottom));
              } else {
                     return new Line(middle_s, middle_t);
              }
       }
}

但现在的疑问是 cut 方法中的 '==' 运算符来检查它们是否是同一个正方形的点。点是不可变的吗??请帮助我... 提前致谢。

最佳答案

Point 是否不可变并不重要。重要的是 == 正在进行指针/引用比较。它正在检查 middle_smiddle_t 是否引用相同的 Object 实例,而不是它们的内部字段是否相同。

您可能想要做的是为 Point 类实现/覆盖 equals(),以便它比较 xy 坐标,匹配则返回真。然后您可以通过执行 if (middle_s.equals(middle_t)) 来比较您的观点。

当您覆盖 equals() 时,请确保您也相应地覆盖了 hashCode()

关于java - 我可以使用 == 运算符来比较 Java 中的 Point 对象吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6886836/

相关文章:

java - Java中==和equals()有什么区别?

java - 关于Java中JTextField的一个问题

java - Android Studio 类名自动完成建议红色

java - Spring beans 的键为 Map<String,Foo>

java - 如何在没有继承的(快捷方式)的情况下在 Eclipse 中获取方法列表?

java - equals 方法是否适用于对象?如果是这样,如何?

Java - 针对白名单的手动对象验证

ios - 使用一种方法代替多种方法

ios - 如何从 url 获取 objectID?

java - 如何在 Fujaba 下将 .java 文件转换为 UML 图?