2016-03-06 102 views
-3

我猜测这个代码序列输出:如果我猜的头,我得到c1.equals(c2)是真是假?

Circle c1 = new Circle(5); 
Circle c2 = new Circle(5); 
Circle c3 = new Circle(15); 
Circle c4 = null; 
System.out.println(c1==c1); 
System.out.println(c1==c2); 
System.out.println(c1==c3); 
System.out.println(c1.equals(c1)); 
System.out.println(c1.equals(c2)); 
System.out.println(c1.equals(c3)); 
System.out.println(c1.equals(c4)); 

真假假假真真假假

如果我作弊并编译它我得到:

true false false false true f ALSE虚假

所以我的问题是,是

的System.out.println(c1.equals(C2));

true or false?

+4

什么是“圈”?另外,结果的数量与'println'的数量不匹配... – Tunaki

+3

你需要提供实际的类'Circle' –

+1

你不需要显示完整的'Circle'类,只是告诉我们什么' .equals'方法适用于'Circle'类。如果它不存在,则默认为与“c1 == c2”相同。 – 4castle

回答

2

这取决于你的班级圈。

c1.equals(c2)实际上只是在您的类Circle上使用参数c2调用对象c1的方法“equals”。如果有这种方法的自定义实现,可能会期望它返回true。 如果没有,它将默认为equals的超类(Object)声明,这与使用“==”运算符相同。

public boolean equals(Object obj) { 
    return (this == obj); 
} 
2

要添加到现有的答案,如果你想覆盖.equals()方法,您通常使基于对象的某些属性的平等。根据我的理解,只有当它们具有相等的半径时,才希望圆相等。

如果你有一个.getRadius()功能,那么样品.equals()方法的定义是

@Override 
public boolean equals(Object o) { 
    if(o == null) { 
     return false; 
    } else if (!(o instanceof Circle)) { 
     return false; 
    } else { 
     return this.radius == ((Circle) o).getRadius(); 
    } 
} 

我也将增加,每当你重写.equals(),你也应该重写.hashCode()这样,每当两个对象是“平等” ,他们也有相同的哈希码。欲了解更多信息,this是一个很好的阅读。

+0

对this.radius的好想法。这可能是检查圈子中平等的最佳方式。如果他还没有实施,那应该是。为此赞成。 –

相关问题