Java中「==和equals」的區別

String str = "example"; String str2 = "example"; String str3 = "example"; String str4 = new String("example"); (1)str == str4 -> false2)str.equals(str4) -> true
String str = "example";內存會去查找永久代(常量池) 是否有「example」,若是沒有的話,在永久代中開闢一塊內存空間,把地址賦給棧指針,若是已經有了"example"的內存,直接把地址賦給棧指針;所以str==str2==str3會一直相等,由於它們指向同一塊內存空間;
 

而String str4 = new String("example");是在堆中重新new一起內存,將棧中的引用指向這塊內存;spa

總結:(1)「==」 是判斷地址的,固然不相同;指針

(2)至於equals,String類型重寫了 equals()方法,判斷內容是否相等,所以 equals 是相等的;code

相關文章
相關標籤/搜索