/**
*
*/
package string;
/**
* @author Administrator
* “==” 比較引用,即判斷是否指向同一個物件
* “equals()” 預設是比較引用,包裝類重寫了這些方法,比較物件內容,我們自己的類一般也重寫equals方法
*
* equals方法屬於Object類,預設的是比較兩個物件引用是否相等,即是否指向同一個物件
* 和使用==號來比較的結果是一樣的。
*
* 對於String,Integer等包裝型別來說,他們已經重寫了Object的equals方法,根據內容判斷是否相等。
*
* 所以一般來說,對於自己實現的類,要想在某些情況下比較返回true,必須重寫equals方法。
* 某些情況下,重寫equals方法最好吧hasCode()也重寫了,比如要存入Map/Set的時候。
*/
//沒有重寫equals的物件
class CompareObject1{
int v;
public CompareObject1(int v){
this.v = v;
}
}
//重寫equals的物件
class CompareObject2{
int v;
public CompareObject2(int v){
this.v = v;
}
public boolean equals(Object o){
CompareObject2 c = (CompareObject2)o;
return this.v == c.v? true:false;
}
}
public class EqualsTest {
/**
* @param args
*/
public static void main(String[] args) {
//普通物件比較
CompareObject1 c1 = new CompareObject1(1);
CompareObject1 c2 = new CompareObject1(1);
System.out.println(c1 == c2); //引用不同
System.out.println(c1.equals(c2)); //引用不同
//String比較
String s1 = new String("hello");
String s2 = new String("hello");
System.out.println(s1 == s2); //引用不同
System.out.println(s1.equals(s2)); //裡面的值相同,重寫過equals方法
//Integer比較
Integer int1 = new Integer(1);
Integer int2 = new Integer(1);
System.out.println(int1 == int2); //引用不同
System.out.println(int1.equals(int2)); //裡面的值相同,重寫過equals方法
//重寫了equals方法的普通物件的比較
CompareObject2 o1 = new CompareObject2(1);
CompareObject2 o2 = new CompareObject2(1);
System.out.println(o1 == o2); //引用不同
System.out.println(o1.equals(o2)); //裡面的值相同,重寫過equals方法
}
}
/**
* Output:
false
false
false
true
false
true
false
true
* */