Here is an example of == and equals
在Java裡,equals和==常令程式設計師困惑,這裡簡單說明如下:
1. ==
測試物件參考時,唯有當兩個參考指向同一物件時,==運算子的結果才為true,同樣的,唯有當兩個參考指向不同物件時,!=運算子的結果才為true,這兩個運算子的處理與物件的內容無關。需要特別注意的是,在String中使用==,因為Java為節省記憶體,會在某一輪調區中維護唯一的String物件,所以如果在類別裡使用同一字串,Java只會建立一個唯一的字串而已。
2. equals
另一種測試的做法是equals,equals在類別為Java原先就存在時,是比較兩個物件是否為相同類型的類別後再比較其內容值是否相同,是就傳回true,否就傳回false。當要測試的類別是自定類別時,要依自定類別所提供的equals來決定如何比較,如果自定類別沒有覆蓋Object的equals類別的話,就以Object的equals來比較,Object的equals的比較方式如同==。
public class myEquals {
public myEquals() {
//字串型別
String sA = "ABC";
String sB = "ABC";
String sC = new String("ABC");
//==的比較
if (sA == sB)
System.out.println("sA == sB");
else
System.out.println("sA != sB");
if (sA == sC)
System.out.println("sA == sC");
else
System.out.println("sA != sC");
//equals的比較
if (sA.equals(sB))
System.out.println("sA.equals(sB) = true");
else
System.out.println("sA.equals(sB) = false");
if (sA.equals(sC))
System.out.println("sA.equals(sC) = true");
else
System.out.println("sA.equals(sC) = false");
//Java原有的型別
Long lngA = new Long(100);
Long lngB = new Long(100);
Long lngC = new Long("100");
//==的比較
if (lngA == lngB)
System.out.println("lngA == lngB");
else
System.out.println("lngA != lngB");
if (lngA == lngC)
System.out.println("lngA == lngC");
else
System.out.println("lngA != lngC");
//equals的比較
if (lngA.equals(lngB))
System.out.println("lngA.equals(lngB) = true");
else
System.out.println("lngA.equals(lngB) = false");
if (lngA.equals(lngC))
System.out.println("lngA.equals(lngC) = true");
else
System.out.println("lngA.equals(lngC) = false");
//自定型別
myObject1 m1A = new myObject1();
myObject1 m1B = new myObject1();
myObject2 m2A = new myObject2();
myObject2 m2B = new myObject2();
//==的比較
if (m1A == m1B)
System.out.println("m1A == m1B");
else
System.out.println("m1A != m1B");
if (m2A == m2B)
System.out.println("m2A == m2B");
else
System.out.println("m2A != m2B");
//equals的比較
if (m1A.equals(m1B))
System.out.println("m1A.equals(m1B) = true");
else
System.out.println("m1A.equals(m1B) = false");
if (m2A.equals(m2B))
System.out.println("m2A.equals(m2B) = true");
else
System.out.println("m2A.equals(m2B) = false");
}
public static void main(String[] args) {
myEquals myEquals1 = new myEquals();
}
}
執行結果
sA == sB
sA != sC
sA.equals(sB) = true
sA.equals(sC) = true
lngA != lngB
lngA != lngC
lngA.equals(lngB) = true
lngA.equals(lngC) = true
m1A != m1B
m2A != m2B
m1A.equals(m1B) = false
m2A.equals(m2B) = true
訂閱:
張貼留言 (Atom)
沒有留言:
張貼留言