gpt4 book ai didi

java - 实现良好的等于方法

转载 作者:行者123 更新时间:2023-12-02 04:18:35 29 4
gpt4 key购买 nike

假设我想在Java中创建一个名为Foo的新类,它有2个成员变量,int bardouble temp,我想为该类提供一个 equals 方法,该方法比较该类的 2 个实例并返回一个 boolean 值。我有 2 个 Foo 实例,f1 和 f2。假设构造函数已正确定义,很多人会告诉我这样做:

public boolean equals(Foo f2)
{
return (bar == f2.getBar() &&
temp == f2.getTemp());
}

在哪里检查是否相等

f1.equals(f2);

但是,我很确定我见过有些人这样做:

public static boolean equals(Foo f1, Foo f2)
{
return (f1.getBar() == f2.getBar() &&
f1.getTemp() == f2.getTemp());
}

在哪里检查是否相等

Foo.equals(f1, f2);

我的问题是,既然我已经看到了这两种实现,那么这两种实现中哪一种被认为是更好的编程风格?

最佳答案

HashMap 这样的标准 Java 类需要这样的方法

public boolean equals(Object obj)
// ^^^^^^

不是

public boolean equals(Foo f2)

这意味着它将使用从父类(super class)继承的equals(Object obj)(因此,如果父类(super class)是Object,它将最终在内部使用==)。

因此,这两种方法都只是附加方法,它们可能同样好或同样坏,具体取决于您想要如何使用它们。 IMO equals(Foo f2) 稍差一些,因为它会导致与 equals(Object o) 混淆。

关于java - 实现良好的等于方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33044534/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com