2016-07-30 67 views
0

我知道這是重複的問題,但這個問題沒有被正確的提出,所以我沒有得到答案。 但我在一次採訪中被問到這個問題。 我想知道這有可能嗎?如果是的話,任何人都可以提供我的代碼如何?Java - 即使兩個對象的內容相同,equals()是否可以返回false?

在此先感謝。

+2

*「我知道這是重複的問題,但這個問題沒有被正確地問,所以我沒有得到答案。」*呃,不。要麼是重複的,要麼在其他地方回答,要麼不是。 –

+0

你爲什麼要那樣做?是的,你可以,你需要執行equals方法... –

回答

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同一實例例如其他參考文獻未覆蓋)。

+0

謝謝....這正是我所需要的。 –

0

是的,如果你有一個不好的執行等於。

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

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

這是最好的答案imho:通過使用來自Java標準庫的對象的計數器示例的證明。 – Bathsheba

+0

謝謝..奇妙.. –

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. 
} 
} 
相關問題