1.“==”常用來比較基本數據類型,8種基本數據類型有byte、short、long、double、char、int、float、boolean,因為變量直接存儲的就是他們的值,所以用"=="去比較,比較的就是他們的值。
但是復合數據類型用“==”比較的是他的堆內存地址。
2.“equals”對於復合數據類型比較的也是它的堆內存地址(不能作用於基本數據類型的變量)。
但在實際項目中常用來比較String字符串的內容相等是為什么呢?
那是因為對於String(還有Date,Integer)類型重寫了equals方法,使其比較的是存儲對象的內容是否相等,而不是堆內存地址。
1 String str1 = "Hello"; 2 String str5 = "Hello"; 3 String str2 = new String("Hello"); 4 String str4 = new String("Hello"); 5 String str3 = str2; // 引用傳遞,同一對象 6 System.out.println(str1 == str2); // false(str2是new的一個新地址) 7 System.out.println(str1 == str3); // false(str3和str2內存地址一樣,和str1地址不同) 8 System.out.println(str2 == str3); // true(引用str2,地址相同) 9 System.out.println(str1 == str5); // true(String作為基本類型,沒創建新地址) 10 System.out.println(str4 == str2); // false(內存地址不同) 11 System.out.println(str1.equals(str2)); // true(內容一致,都是“hello”) 12 System.out.println(str1.equals(str3)); // true(內容一致,都是“hello”) 13 System.out.println(str2.equals(str3)); // true(內容一致,都是“hello”) 14 System.out.println(str2.equals(str4)); // true(內容一致,都是“hello”) 15 System.out.println(str1.equals(str5)); // true(內容一致,都是“hello”)