我创建了一个包含2个字段的类。一个Double和一个Line2D。我想覆盖equals方法,以便下面的代码返回true
public class Main {
public static void main(String[] args) {
StatusLinePair slp1 = new StatusLinePair(25.0, new Line2D.Double(123.0, 32.0, 342.0, 54.0));
StatusLinePair slp2 = new StatusLinePair(25.0, new Line2D.Double(123.0, 32.0, 342.0, 54.0));
System.out.println(slp1.equals(slp2));
}
}
这是我尝试的但是我仍然没有得到预期的结果
public class StatusLinePair {
public Double yAxisOrder;
public Line2D line;
public StatusLinePair(Double yAxisOrder, Line2D line) {
this.yAxisOrder = yAxisOrder;
this.line = line;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((line == null) ? 0 : line.hashCode());
result = prime * result + ((yAxisOrder == null) ? 0 : yAxisOrder.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
StatusLinePair other = (StatusLinePair) obj;
if (this.yAxisOrder == other.yAxisOrder && this.line.getX1() == other.line.getX1()
&& this.line.getX2() == other.line.getX2() && this.line.getY1() == other.line.getY1()
&& this.line.getY2() == other.line.getY2())
return true;
return false;
}
}
请帮帮我。提前谢谢!
答案 0 :(得分:3)
您的代码存在一些问题:
Double
个实例与==进行比较,而应该与equals()
进行比较(或者类应该包含double而不是Double,因为它似乎不可为空):这就是你的具体问题的原因。Line2D.hashCode()
,因为它不使用Line2D.equals()
答案 1 :(得分:2)
您没有使用Line2D.equals,因此我认为这不是以您需要的方式实现,或者您将使用它。如果是这种情况,则不应使用Line2D.hashCode()。
简而言之,要么使用Line2D.hashCode()和Line2D.equals(),要么不使用混合。
答案 2 :(得分:2)
使用== 您没有比较对象的实际值,而是比较参考值。
For example:
Object a = new Object();
Object b = a; // if you compare these two objects with == it will return true
But
Object a =new Object();
Object b = new Object(); // if you compare these two objects with == then it will return false as they are pointing to two different objects
通过覆盖 equals(),您可以根据其值比较两个对象。 check this link out for more on equals
我希望这会有所帮助。 THANKYOU
答案 3 :(得分:-1)
看这里:
重载等于()和运算符的指南==: https://msdn.microsoft.com/en-us/library/ms173147(v=vs.80).aspx
AND
重载GetHashCode指南: https://msdn.microsoft.com/en-us/library/system.object.gethashcode(v=vs.80).aspx
它在C#中,但几乎是一样的!