Java中equals 和==的區別

java中的數據類型,可分爲兩類: 
1.基本數據類型,也稱原始數據類型。byte,short,char,int,long,float,double,boolean 
  他們之間的比較,應用雙等號(==),比較的是他們的值。 
2.複合數據類型(類) 
  當他們用(==)進行比較的時候,比較的是他們在內存中的存放地址,所以,除非是同一個new出來的對象,他們的比較後的結果爲true,否則比較後結果爲false。 JAVA當中所有的類都是繼承於Object這個基類的,在Object中的基類中定義了一個equals的方法,這個方法的初始行爲是比較對象的內存地 址,但在一些類庫當中這個方法被覆蓋掉了,如String,Integer,Date在這些類當中equals有其自身的實現,而不再是比較類在堆內存中的存放地址了。
  對於複合數據類型之間進行equals比較,在沒有覆寫equals方法的情況下,他們之間的比較還是基於他們在內存中的存放位置的地址值的,因爲Object的equals方法也是用雙等號(==)進行比較的,所以比較後的結果跟雙等號(==)的結果相同。

複製代碼
1 public class TestString { 2  public static void main(String[] args) { 3 String s1 = "Monday"; 4 String s2 = "Monday"; 5 if (s1 == s2)  6 { 7 System.out.println("s1 == s2");} 8 else{ 9 System.out.println("s1 != s2");} 10 } 11 }
複製代碼
編譯並運行程序,輸出:s1 == s2說明:s1 與 s2 引用同一個 String 對象 -- "Monday"!
2.再稍微改動一下程序,會有更奇怪的發現:
複製代碼
public class TestString { public static void main(String[] args) { String s1 = "Monday"; String s2 = new String("Monday"); if (s1 == s2) {System.out.println("s1 == s2");} else {System.out.println("s1 != s2");} if (s1.equals(s2)) {System.out.println("s1 equals s2");} else{ System.out.println("s1 not equals s2");} } }
複製代碼

我們將s2用new操作符創建
程序輸出:
s1 != s2
s1 equals s2
說明:s1 s2分別引用了兩個"Monday"String對象
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章