equals ==(不求甚解) 十六
/**
* 總之:
“==”比較的是值【變量(棧)內存中存放的對象的(堆)內存地址】
基本數據類型比較:自然數值。
引用:比較的也是值,只不過不是數值,是變量本身的值(這個值是內存地址)
比如:String str="abc";str應用的值,是內存個地址。指向的對象的值
是"abc"
equal用於比較兩個對象的值是否相同【不是比地址】 ,比較的前提,兩個比較對象的類型要一樣,然後再比較值。
如果類型不一樣,返回肯定是false。
Object
public boolean equals(Object obj) {
return (this == obj);
}
其他類型:xx
public boolean equals(Object obj) {
if (obj instanceof xx) {
return value == ((xx)obj).byteValue();
}
return false;
}
【特別注意】Object類中的equals方法和“==”是一樣的,沒有區別,而String類,
Integer類等等一些類,是重寫了equals方法,才使得equals和“==不同”,所以,
當自己創建類時,自動繼承了Object的equals方法,要想實現不同的等於比較,必須重寫equals方法。
*
*/
public class EqualsTest {
public static void main(String[] args) {
Byte a = 1;
Byte b = new Byte("1");
Byte c = 0x1;
System.out.println("a.equals(1):"+a.equals(1));
System.out.println("a==1:"+(a==1));
System.out.println("a.equals(b):"+a.equals(b));
System.out.println("a==b:"+(a==b));
System.out.println("c.equals(1):"+c.equals(1));
System.out.println("c==1:"+(c==1));
System.out.println("======================");
Integer i = 1;
System.out.println("i.equals(1):"+i.equals(1));
System.out.println("i==1:"+(i==1));
//==============================================
//對於基本類型的變量。"=="和"equal"的區別
//“==”對於基本數據類型,判斷兩個變量的值是否相等。
//“equal”不能用於基本數據類型。只能用於類變量。對於基本數據類型要用其包裝類。
//對於對象變量,"=="和"equal"的區別
System.out.println("======================");
String st1="you ";
String st2="are super man";
String st3="you are super man";
String st4="you are super man";
Boolean b1=(st1==st2);
Boolean b2=(st1+st2)==st3;
Boolean b3=(st3==st4);
System.out.println("st1==st2:"+b1+"-----(st1+st2)==st3:"+b2+"-----st3==st4:"+b3);
//因爲對象變量的存儲的是對象在內存中的路徑,即內存地址。所以用“==”比較時,即使
//對象的值相等,但是他們的內存地址不同,所以==的結果爲false。故“==”用於比較兩
//個變量的值是否相等,而不是變量引用的對象是否相等
Boolean r1=st1.equals(st2);
Boolean r2=(st1+st2).equals(st3);
Boolean r3=st3.equals(st4);
System.out.println("st1.equals(st2):"+r1+"-----(st1+st2).equals(st3):"+r2+"-----st3.equals(st4):"+r3);
//equal用於比較兩個對象是否相同。
}
}
* 總之:
“==”比較的是值【變量(棧)內存中存放的對象的(堆)內存地址】
基本數據類型比較:自然數值。
引用:比較的也是值,只不過不是數值,是變量本身的值(這個值是內存地址)
比如:String str="abc";str應用的值,是內存個地址。指向的對象的值
是"abc"
equal用於比較兩個對象的值是否相同【不是比地址】 ,比較的前提,兩個比較對象的類型要一樣,然後再比較值。
如果類型不一樣,返回肯定是false。
Object
public boolean equals(Object obj) {
return (this == obj);
}
其他類型:xx
public boolean equals(Object obj) {
if (obj instanceof xx) {
return value == ((xx)obj).byteValue();
}
return false;
}
【特別注意】Object類中的equals方法和“==”是一樣的,沒有區別,而String類,
Integer類等等一些類,是重寫了equals方法,才使得equals和“==不同”,所以,
當自己創建類時,自動繼承了Object的equals方法,要想實現不同的等於比較,必須重寫equals方法。
*
*/
public class EqualsTest {
public static void main(String[] args) {
Byte a = 1;
Byte b = new Byte("1");
Byte c = 0x1;
System.out.println("a.equals(1):"+a.equals(1));
System.out.println("a==1:"+(a==1));
System.out.println("a.equals(b):"+a.equals(b));
System.out.println("a==b:"+(a==b));
System.out.println("c.equals(1):"+c.equals(1));
System.out.println("c==1:"+(c==1));
System.out.println("======================");
Integer i = 1;
System.out.println("i.equals(1):"+i.equals(1));
System.out.println("i==1:"+(i==1));
//==============================================
//對於基本類型的變量。"=="和"equal"的區別
//“==”對於基本數據類型,判斷兩個變量的值是否相等。
//“equal”不能用於基本數據類型。只能用於類變量。對於基本數據類型要用其包裝類。
//對於對象變量,"=="和"equal"的區別
System.out.println("======================");
String st1="you ";
String st2="are super man";
String st3="you are super man";
String st4="you are super man";
Boolean b1=(st1==st2);
Boolean b2=(st1+st2)==st3;
Boolean b3=(st3==st4);
System.out.println("st1==st2:"+b1+"-----(st1+st2)==st3:"+b2+"-----st3==st4:"+b3);
//因爲對象變量的存儲的是對象在內存中的路徑,即內存地址。所以用“==”比較時,即使
//對象的值相等,但是他們的內存地址不同,所以==的結果爲false。故“==”用於比較兩
//個變量的值是否相等,而不是變量引用的對象是否相等
Boolean r1=st1.equals(st2);
Boolean r2=(st1+st2).equals(st3);
Boolean r3=st3.equals(st4);
System.out.println("st1.equals(st2):"+r1+"-----(st1+st2).equals(st3):"+r2+"-----st3.equals(st4):"+r3);
//equal用於比較兩個對象是否相同。
}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.