關於equals與==的區別從以下幾個方面來說:
(1) 如果是基本型別比較,那麼只能用==來比較,不能用equals
比如:public class testequals
}(2)
對於基本型別的包裝型別,比如boolean、character、byte、shot、integer、long、float、double等的引用變數,==是比較位址的,而equals是比較內容的。 比如:
public class testequals
}這是integer的例項,如果是其他的比如double、character、float等也一樣。
(3) 注意:對於string(字串)、stringbuffer(執行緒安全的可變字串行)、stringbuilder(可變字串行)這三個類作進一步的說明。
(a)首先,介紹string的用法,請看下面的例項:
public class testequals
}答案解釋:s1與s2分別指向由字串常量」123」 建立的物件,在常量池中,只有乙個物件,內容為123,有兩個引用s1和s2指向這個物件,故這兩個引用變數所指向的位址是相同的,因而(1)處的執行結 果為true,又因為s1.equals(s2)是比較s1和s2所指向的物件的內容是否相等,而我們知道這兩個物件的內容都是字串常量」123」,故 標記(2)處的執行結果是true。
用同樣的方法分析,s1和s3所指向的物件不一樣,內容也不一樣,故標記(3)和(4)處執行結果是false。
再 看看s4和s5,這兩個引用變數所指向的物件的內容都是一樣的(內容都是123),但是這兩個物件是用new操作符建立處類的,是在記憶體中分配兩塊空間給 這兩個物件的,因而這兩個物件的記憶體位址不一樣,故事兩個不同的物件,標記(5)處的s4 == s5 執行結果為false,但是內容一樣,故標記(6)處的s4.equals(s5)執行結果為true。同理,s4和s6所指向的物件位址不同,內容也不 相同。故標記(7)(8)處執行結果為false。
s1和s4分別指向兩個不同的物件(之所以這樣稱呼,是因為這兩個物件在記憶體中的位址不相同,故而物件不相同),故標記為(9)處的s1 == s4執行結果為false。
總結:
(1)對字元變數來說:
「==」比較兩個變數本身的值,即兩個物件在記憶體中的首位址。
「equals()」比較字串中所包含的內容是否相同
(stringbuffer類中沒有重新定義equals這個方法,因此這個方法就來自object類,
而object類中的equals方法是用來比較「位址」的;
string類中定義重新定義了equals這個方法,比較的是「值」不是「位址」
。)
(2)對非字元變數來說:
"==" 和"equals"方法的作用是相同的,都是用來比較其物件在堆記憶體的首位址,即用來比較兩個引用變數是否指向同乙個物件。
與equals的區別
注意 當比較兩個基本資料型別的變數是否相等時 基本資料型別包括 byte short int long float double 當它們的值相同時,則 結果就為true eg public class class6 1 public static void main string args stri...
與equals的區別
public class equaltest 執行結果為 t1 t2 false t1 t2 t3 true t3 t4 true i1.equals i2 false i3.equals i1 i2 true i3.equals i4 true st1 st2 false st1 st2 st3 ...
與 equals的區別
與equals都是比較兩個變數得到true或false。在進行比較時,先說說記憶體,記憶體分為堆和棧。基本資料型別中,是把值存在棧中,把值傳遞給變數,這種傳遞叫值傳遞。引用資料型別中,是在棧中存位址,堆中存的new的物件,給變數賦值傳遞時,傳的是位址,這種傳遞叫引用傳遞。基本資料型別 int a 1...