Java中對(duì)象的等價(jià)性比較
Java中不能簡單的用==、!=等比較符對(duì)兩個(gè)對(duì)象進(jìn)行比較,盡管有時(shí)候兩個(gè)對(duì)象的內(nèi)容完全一樣,但是對(duì)象的引用卻是不一樣的!因此,對(duì)兩個(gè)對(duì)象的實(shí)際內(nèi)容進(jìn)行比較時(shí),必須使用所有對(duì)象都適用的特殊方法equals()。
看下面一個(gè)例子:
- public class EqualsMethod{
- public static void main(String[] strs){
- Integer n1 = new Integer(47);
- Integer n2 = new Integer(47);
- //不能直接將兩個(gè)引用比較,輸出false
- System.out.println(n1==n2);
- //用特殊方法equals(),比較兩個(gè)對(duì)象的實(shí)際內(nèi)容,輸出true
- System.out.println(n1.equals(n2));
- int n3 = 47;
- int n4 = 47;
- //基本類型比較,可直接用比較符即可,輸出true
- System.out.println(n3==n4);
- }
- }
equals()方法不適用于“基本類型”,基本類型直接使用==和!=即可,這點(diǎn)從上例中也可以看出來。
但是,事情并不是這么簡單,對(duì)于我們自己創(chuàng)建的類,equals()默認(rèn)比較兩個(gè)對(duì)象的引用,如下例:
- class Value{
- int i;
- }
- public class EqualsMethod{
- public static void main(String[] strs){
- Value n1 = new Value();
- Value n2 = new Value();
- n1.i = n2.i = 100;
- //對(duì)于自己創(chuàng)建的類,用equals(),默認(rèn)比較兩個(gè)對(duì)象的引用,輸出false
- System.out.println(n1.equals(n2));
- }
- }
所以除非在自己的新類中覆蓋equals()方法,否則不可能表現(xiàn)出我們希望的行為。
原文鏈接:http://www.cnblogs.com/eczhou/archive/2011/12/07/2278981.html
【編輯推薦】