java中的equals()和运算符"=="

8 java equals

我知道equals()会比较对象的值,'=='运算符会检查变量是否指向同一个内存.

我不明白如何equals()比较对象的价值,例如:

class Test {
    public Test(int x, float y) {
        this.x = x;
        this.y = y;
    }

    int x,
    float y;
}

Test test1 = new Test(1,2.0);
Test test2 = new Test(1,2.0);
Run Code Online (Sandbox Code Playgroud)

所以,如果我使用equals(),它会比较每个对象中的每个属性吗?

那么如果我们谈论String呢?使用equals()和operator"==",我们还需要覆盖equals()吗?

the*_*ega 20

不,如果你没有覆盖equals你班级中的-method,那么equals就像==.请参阅以下文档:

类Object的equals方法实现了对象上最具辨别力的等价关系; 也就是说,对于任何非空引用值x和y,当且仅当x和y引用同一对象时,此方法才返回true(x == y的值为true).

文档还说明了equals在您想要实现方法的情况下对方法的要求.

  • 是的,`equals`方法在这种情况下从`Object`继承,它具有以下实现:`public boolean equals(Object obj){return this == obj;}` (4认同)

duf*_*ymo 11

除非你按照约书亚布洛赫制定的规则适当超载.

默认行为使用检查引用的相等性==.

覆盖equals hashCode对象是很重要的,特别是如果你打算在java.util.Collections中使用它们.

  • @duffymo @MattiVirkkunen请把它带到其他地方 (5认同)
  • 一些随机的家伙?我认为你不知道约书亚布洛赫是谁.引用是标准.他是编写java.util Collections的人. (3认同)
  • 如果那个"随机"个体实际上构思并编写了您引用的标准怎么办?这会让他变得愚蠢吗? (2认同)
  • @duffymo:标准是团队的努力.我确信还有很多其他人参与其中. (2认同)
  • @duffymo:我会的.你应该尝试偶尔思考一下!可能会帮助你摆脱你崇拜人的倾向. (2认同)
  • 我不是在崇拜任何人,只是陈述一个事实. (2认同)
  • @duffymo:有时你决定陈述哪些事实比它们实际上是否真实更重要. (2认同)