面試被問到==和equals區別


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”)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM