關於java裏的equals()方法和==

首先,在瞭解equals()方法和==之前,我們先了解一下數據類型.Java裏數據類型分爲基本數據類型和引用數據類型.基本數據類型又分爲四類八種:布爾類:boolean;整形類:byte,short,int;字符類:char;浮點類:float,double.引用數據類型可以分爲:類,接口,數組.

在瞭解數據類型後,開始瞭解equals()和==

關於==

對於基本數據類型,使用==,比較的是他們的值.

對於引用數據類型,使用==,比較的是他們的地址.關於這裏的地址,每new一次,都會開闢一個新的堆內存空間,產生一個新的地址。

所以,相同類,new出的不同對象,地址是不同的.

以下是==的使用說明:

public class DuiXiang1 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int a = 10;
		int b = 15;
		int c = 10;
		System.out.println(a==b);
		System.out.println(a==c);
		Test1 t1 = new Test1();
		Test1 t2 = new Test1();
		System.out.println("t1的地址是:"+t1+"  t2的地址是:"+t2);
		t1.a = 10;
		t2.a = 10;
		System.out.println(t1 == t2);
//通過對象調用裏面的值做==比較,這時候比較的是值的大小,具體看結果證明
		System.out.println(t1.a==t2.a);
		

	}

}
class Test1{
	int a;
}

運行的結果:

false
true
t1的地址是:testDemo.Test1@e020c9  t2的地址是:testDemo.Test1@888e6c
false
true

由t1,t2的地址可以看出,同類下,new出的不同對象,地址是不同的.

關於equals()

equals是Object類中定義的一個方法,這個方法是用來比較對象的內存地址.但是在很多類中,都重寫了這個方法,比如Integer,String,重寫後的equals方法比較的是方法裏的值,而不再是地址.具體使用請細心閱讀一下代碼,理解重寫和不重寫的區別:

下面是Object類裏equals方法代碼:

public boolean equals(Object obj) {
        		return (this == obj);  
    		}

我們可以看出,調用這個方法,返回的是兩個對象地址比較的結果

我們來看一個實例:

public class DuiXiang {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
	
		Integer n1 = new Integer(10);//假設n1的地址是 -->001
		Integer n2 = new Integer(10);//假設n的地址是 -->002
		System.out.println(n1.equals(n2));
//原先equal方法比較地址值,但Interger類重寫equals ,使方法變成--> 引用數據類型的值進行的比較
		
		Test n3 = new Test();//假設n3的地址是 -->003
		Test n4 = new Test();//假設n4的地址是 -->004
		n3.a=10;
		n4.a=10;
		System.out.println(n3.equals(n4));
//因爲Test類裏面沒有重寫equal方法,所以,equal方法比較的還是地址.

	}

}

class Test{
	int a;
	
}

運行結果:

true
false

由結果可以看出,Integer重寫equals方法後比較的是值,Test類使用object中的equals方法,比較的是地址.

我們看一下Integer是如何重寫equals方法的

public boolean equals(Object obj) {
        if (obj instanceof Integer) {
            return value == ((Integer)obj).intValue();
        }
        return false;
    }

我們自己重寫equals方法

接下來,我要在我自己的Test類裏重寫equals方法,實現比較值的不同,而不是比較地址.以下是代碼:

public class DuiXiang {

	public static void main(String[] args) {
		
		Test n3 = new Test();//假設n3的地址是---003
		Test n4 = new Test();//假設n4的地址是---004
		n3.a=10;
		n4.a=10;
		System.out.println(n3.equals(n4));

	}

}

class Test{

	int a;
	public boolean equals(Object obj) {
		Test t = (Test) obj;
		return a == t.a;
	}
}

運行結果:

true

由結果可以看出,我們通過重寫equals()方法,實現了比較對象裏的值.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章