Java中的==和equals
阿新 • • 發佈:2017-09-06
基於 equals return 復合 覆蓋 之間 方法 [] 。。
1.基本數據類型
byte ,short ,int ,long ,double ,float,boolean,char
他們之間的比較,應用雙等號(==),比較的是他們的值。
2.復合數據類型(類)
當他們用(==)進行比較的時候,比較的是他們在內存中的存放地址,所以,除非是同一個new出來的對象,他們的比較後的結果為true,否則比較後結果為false。JAVA當中所有的類都是繼承於Object這個基類的,在Object中的基類中定義了一個equals的方法,Object的equals源碼:
1 public boolean equals(Object obj) { 2 return(this == obj); 3 }
這個方法的初始行為是比較對象的內存地 址,但在一些類庫當中這個方法被覆蓋掉了,如String,Integer,Date在這些類當中equals有其自身的實現,而不再是比較類在堆內存中的存放地址了。
對於復合數據類型之間進行equals比較,在沒有覆寫equals方法的情況下,他們之間的比較還是基於他們在內存中的存放位置的地址值的,因為Object的equals方法也是用雙等號(==)進行比較的,所以比較後的結果跟雙等號(==)的結果相同。
範例代碼:
1 public class Test { 2 public static voidtest01() { 3 String s1 = "hello"; 4 String s2 = "hello"; 5 System.out.print("test01: "); 6 if (s1 == s2) { 7 System.out.print("s1==s2" + " "); 8 } else { 9 System.out.print("s1!=s2" + " "); 10 } 11 if (s1.equals(s2)) {12 System.out.print("s1 equals s2"); 13 } else { 14 System.out.print("s1 not equals s2"); 15 } 16 } 17 18 public static void test02() { 19 String s1 = "hello"; 20 String s2 = new String("hello"); 21 System.out.print("\ntest02: "); 22 if (s1 == s2) { 23 System.out.print("s1==s2" + " "); 24 } else { 25 System.out.print("s1!=s2" + " "); 26 } 27 if (s1.equals(s2)) { 28 System.out.print("s1 equals s2"); 29 } else { 30 System.out.print("s1 not equals s2"); 31 } 32 } 33 34 public static void test03() { 35 String s1 = "hello"; 36 String s2 = new String("hello"); 37 System.out.print("\ntest03: "); 38 s2 = s2.intern(); 39 if (s1 == s2) { 40 System.out.print("s1==s2" + " "); 41 } else { 42 System.out.print("s1!=s2" + " "); 43 } 44 if (s1.equals(s2)) { 45 System.out.print("s1 equals s2"); 46 } else { 47 System.out.print("s1 not equals s2"); 48 } 49 } 50 51 public static void main(String[] args) { 52 test01(); 53 test02(); 54 test03(); 55 int i = 0; 56 Integer j = new Integer(0); 57 System.out.println("\n" + (i == j)); 58 System.out.println(j.equals(i)); 59 } 60 }
輸出結果:
test01: s1==s2 s1 equals s2 test02: s1!=s2 s1 equals s2 test03: s1==s2 s1 equals s2 true true
未完待續。。。
Java中的==和equals