【问题标题】:Compare and equals methods stack overflow error比较和等于方法堆栈溢出错误
【发布时间】:2016-03-12 17:03:40
【问题描述】:

您好,这是我第一次提出问题,所以可能不是最好的。 所以我正在开发一个使用继承和实现的项目。我的问题是当我运行比较或等于方法时,java 给了我一个堆栈溢出错误,我到处寻找解决这个问题,但无法这样做。这可能只是一个简单的我不知道要问什么。

//this is from the class that inherits
@Override
public boolean equals(Object o){
    if(this.equals(o)){
        return true;
    }
    return false;
}
//This is what its inheriting from
public boolean equals(Object o){
    boolean findings;
    findings = this.getStrength().equals(((Weapon)o).getStrength());
    if(strength == ((Weapon)o).strength){
        return true;
    }
    return false;
}

//this code is an instance of another
@Override
public int compareTo(Force o) {
    return this.compareTo(o);
}

您能提供的任何建议将不胜感激。谢谢。

public class Pizza extends Store {
public Pizza(int strong){
    super.changeStrength(strong);
}

@Override
public boolean equals(Object o){
    if(o!=null){
        if(super.getStrength()==((Pizza)o).getStrength()){
            return true;
        }
    }
    return false;
}
}

这里是披萨类的代码

【问题讨论】:

    标签: java compare project equals


    【解决方案1】:

    更改为以下方法以避免递归,因为您从 equals 方法调用相同的 equals 方法。 this 指的是同一个类,并且由于您重写了 equals 方法,它调用了相同的方法并在没有任何退出条件的情况下变为递归。 StackOverFlowError 告诉您它卡在递归循环中。

    @Override
    public boolean equals(Object o){
        if(super.equals(o)){
            return true;
        }
        return false;
    }
    

    更新

    @Override
    public boolean equals(Object o){
        if (this == o) return true;
        if (!(o instanceof Pizza)) return false;
    
        Pizza pizza = (Pizza) o;
    
        return getStrength() == pizza.getStrength();
    }
    

    【讨论】:

    • 好吧,我还有一个问题。我正在为这个项目使用测试仪,它说它们在运行时不相等
    • pizza1 = new Pizza(63);比萨2 =新比萨(63);实际 = Pizza1.equals(pizza2); assertTrue("不正确的结果", 实际的);这是测试代码
    • 您需要在 Pizza 类中实现 equals 方法才能执行,以了解如何比较 Pizza 对象是否相等。
    • @Override public boolean equals(Object o){ if(super.equals(o)){ return true; } 返回假; } 像这样?
    • 刚刚添加到帖子中
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-30
    • 1970-01-01
    • 2014-01-26
    • 2019-02-16
    • 2011-09-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多