我知道這是重複的問題,但這個問題沒有被正確的提出,所以我沒有得到答案。 但我在一次採訪中被問到這個問題。 我想知道這有可能嗎?如果是的話,任何人都可以提供我的代碼如何?Java - 即使兩個對象的內容相同,equals()是否可以返回false?
在此先感謝。
我知道這是重複的問題,但這個問題沒有被正確的提出,所以我沒有得到答案。 但我在一次採訪中被問到這個問題。 我想知道這有可能嗎?如果是的話,任何人都可以提供我的代碼如何?Java - 即使兩個對象的內容相同,equals()是否可以返回false?
在此先感謝。
在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
同一實例例如其他參考文獻未覆蓋)。
謝謝....這正是我所需要的。 –
是的,如果你有一個不好的執行等於。
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());
}
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.
這是最好的答案imho:通過使用來自Java標準庫的對象的計數器示例的證明。 – Bathsheba
謝謝..奇妙.. –
是所有陣列的真實。您也可以重寫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.
}
}
*「我知道這是重複的問題,但這個問題沒有被正確地問,所以我沒有得到答案。」*呃,不。要麼是重複的,要麼在其他地方回答,要麼不是。 –
你爲什麼要那樣做?是的,你可以,你需要執行equals方法... –