我试图通过一一比较它们的实例变量来比较两个对象。我不断收到相同的错误(仅比较名称时)
这是我不断收到的错误:java.lang.AssertionError:两个实例不相等,它们有不同的名称
这是我的代码:
@Override
public boolean equals(Object obj) {
if (this == obj) return true;
if (obj == null || getClass() != obj.getClass()) return false;
Beverage beverage = (Beverage) obj;
if(this.name == null || beverage.name == null ) return false;
if (!Objects.equals(name, beverage.name)) return false;
if (Double.compare(beverage.price, price) != 0) return false;
if (Double.compare(beverage.discount, discount) != 0) return false;
return sugarLevel == beverage.sugarLevel;
}
错误仅与名称和每次相同的消息有关,我尝试了多种解决方案,但没有一个有效
最好让您的 IDE 为您生成
equals
实现。
此外,在实现
equals
时,始终以一致的逻辑来实现 hashCode
。
例如,这是由 IntelliJ 2024 生成的代码。
package work.basil.example.equality;
import java.util.Objects;
public class Beverage
{
public String name;
public double price;
public Beverage ( final String name , final double price )
{
this.name = name;
this.price = price;
}
@Override
public boolean equals ( final Object o )
{
if ( this == o ) return true;
if ( o == null || getClass( ) != o.getClass( ) ) return false;
final Beverage beverage = ( Beverage ) o;
return Double.compare( price , beverage.price ) == 0 && Objects.equals( name , beverage.name );
}
@Override
public int hashCode ( )
{
return Objects.hash( name , price );
}
}