1. 程式人生 > >Java中的==和equals

Java中的==和equals

基於 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 void
test01() { 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