我知道这是重复的问题,但问题没有被正确询问,所以我没有得到答案。 但我在一次采访中被问到这个问题。 我想知道这可能吗?如果是的话,有人能为我提供代码吗?
提前致谢。
答案 0 :(得分:5)
StringBuilder这样做是因为它是可变的。不考虑内容,只考虑对象是否相同。
StringBuilder a = new StringBuilder();
StringBuilder b = new StringBuilder();
a.equals(b); // false as they are not the same object.
所有作为对象的数组
也是如此int[] a = {};
int[] b = {};
a.equals(b); // false, not the same object.
Arrays.equals(a, b); // true, contents are the same.
答案 1 :(得分:2)
在java中,方法public boolean equals(Object obj)
继承自Object.class。由于所有Java对象都(最终)从Object继承,因此它们都继承了该方法。但是,Object类中定义的方法的实现是,当且仅当被比较的两个对象是同一个实例时,equals
方法才会返回。
public class WrappedString {
private final String str = "hello";
}
public void foo() {
WrappedString ws1 = new WrappedString();
WrappedString ws2 = new WrappedString();
System.out.println(ws1.equals(ws2));
}
上面的代码段的输出将为false
,因为ws1
只会等于它自己(例如,由于equals
未覆盖,因此对同一实例的其他引用)。
答案 2 :(得分:0)
是的,如果你的equals实现不好。
public boolean equals(Object o){
return false;
}
例如,或者,如果他们没有完全相同的类型:
public boolean equals(Object o){
// o is an instance of a parent class, with exactly the same content. bad design, but possible.
if ( o == null ){
return false;
}
if ( !o.getClass().equals(this.getClass()){ // or a similar check
return false;
}
Child ot = (Child)o;
return this.content.equals(ot.getContent());
}
答案 3 :(得分:0)
是。您也可以覆盖equals()方法并使用它。
class Person {
private String Name;
public Person(String name){
this.name = name;
}
@Override
public boolean equals(Object that){
if(this == that) return false; //return false if the same address
if(!(that instanceof People)) return true; //return true if not the same
People thatPeople = (People)that;
return !this.name.equals(thatPeople.name); //return false if the same name.
}
}