比较和等于方法堆栈溢出错误

时间:2016-03-12 17:03:41

标签: java compare project equals

嗨,这是我第一次提问,所以可能不是最好的。 所以我正在使用继承和实现的项目。我的问题是,当我运行我的比较或等于方法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;
}
}

这里是披萨类的代码

1 个答案:

答案 0 :(得分:1)

更改为以下方法以避免递归,因为您从equals方法调用相同的equals方法。 @Override public boolean equals(Object o){ if(super.equals(o)){ return true; } return false; } 指的是同一个类,因为你已经覆盖了equals方法,所以它调用相同的方法并且在没有任何退出条件的情况下变为递归。 StackOverFlowError告诉你它停留在递归循环中。

@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();
}

更新

declare @serialNo

update top(1) Books
set 
  @serialNo = serialNo, 
  status = 'R',
  user = @userId
where 
  book = @bookId and 
  status = 'F'