首先,在瞭解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()方法,實現了比較對象裏的值.