我尝试比较两个对象,但我不断收到相同的错误(在比较名称时)

问题描述 投票:0回答:1

我试图通过一一比较它们的实例变量来比较两个对象。我不断收到相同的错误(仅比较名称时)

这是我不断收到的错误: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;
    }

错误仅与名称和每次相同的消息有关,我尝试了多种解决方案,但没有一个有效

java string compare string-comparison
1个回答
0
投票

最好让您的 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 );
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.