接著討論關(guān)于字符串的問(wèn)題钞它,現(xiàn)在有一個(gè)程序如下:
public static void main(String[] args) throws Exception{
String str1 = 1 + 2 + "apple";
String str2 = "apple"+1+2;
System.out.println(str1 == "12apple");
System.out.println(str2 == "apple12");
}
那么現(xiàn)在請(qǐng)問(wèn)程序的運(yùn)行結(jié)果如何?都為 true
?
我們看看運(yùn)行結(jié)果:
?false
?true
貌似一切都不是我們想象的那么簡(jiǎn)單廉侧,當(dāng)然也沒(méi)有想象中的那么復(fù)雜。
原來(lái)在java中對(duì)"+"
的處理機(jī)制是在計(jì)算表達(dá)式的時(shí)候篓足,只要遇到String字符串段誊,則所有的數(shù)據(jù)都會(huì)轉(zhuǎn)化為String
類型進(jìn)行處理,如果是原始類型栈拖,就直接拼接连舍,如果是類類型,就調(diào)用toString()
方法進(jìn)行返回值的拼接涩哟。
String str = "123";
str = str+new ArrayList();
上面就是通過(guò)ArrayList對(duì)象的toString()
方法的返回值然后和str
進(jìn)行拼接索赏。回到我們之前的問(wèn)題贴彼,對(duì)于str1
字符串潜腻,Java執(zhí)行順序是從左到右的,先執(zhí)行1+2
器仗,然后再和字符串的拼接融涣,結(jié)果就是"3apple"
,其形式類似于如下:
String str1 = (1+2)+"apple";
而對(duì)于str2
字符串而言精钮,第一個(gè)參與運(yùn)算的是字符串,后面的運(yùn)算都要轉(zhuǎn)換為字符串類型進(jìn)行運(yùn)算威鹿,所以加1
的結(jié)果就是"apple1"
,然后再加2
,所以最后的運(yùn)算結(jié)果是"apple12"
備注:在"+"
表達(dá)式中轨香,String
字符串擁有最高的優(yōu)先級(jí)专普。