我們來看下面一段代碼:

str1 == str2將返回true,為什么呢?Java中的基本數(shù)據(jù)類型使用"=="可以判斷操作數(shù)是否相等,對(duì)于對(duì)象則判斷這兩個(gè)對(duì)象的內(nèi)存地址是否相同。Java虛擬機(jī)為了提高字符串應(yīng)用效率,提供了字符串池來保存字符串常量,str1創(chuàng)建字符串常量"abc"時(shí),虛擬機(jī)會(huì)先檢測字符串池中是否包含該字符串,如果不包含則創(chuàng)建該字符串常量,并將其保存在字符串池中,然后再返回。str2也賦值為"abc",這時(shí)字符串池中已存在該字符串,不再創(chuàng)建,直接返回該字符串。也就是str1、str2引用同一個(gè)字符串,地址是相同的,因此str1 == str2成立。
但是使用new關(guān)鍵字創(chuàng)建的字符串會(huì)新開辟內(nèi)存看空間,因此str2 == str3不成立。
——以上內(nèi)容摘自《Java開發(fā)實(shí)戰(zhàn)1200例(第Ⅰ卷)》