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