讀古今文學網 > 編寫高質量代碼:改善Java程序的151個建議 > 建議55:注意字符串的位置 >

建議55:注意字符串的位置

看這樣一段程序:


public static void main(Stringargs){

String str1=1+2+"apples";

String str2="apples:"+1+2;

}


想想看這兩個字符串輸出的蘋果數量是否一致?如果一致,那是幾個呢?

答案是不一致,str1的值是"3 apples",str2的值是"apples:12",這中間懸殊很大,只是把"apples"調換了一下位置,為何會發生如此大的變化呢?

這都源於Java對加號的處理機制:在使用加號進行計算的表達式中,只要遇到String字符串,則所有的數據都會轉換為String類型進行拼接,如果是原始數據,則直接拼接,如果是對象,則調用toString方法的返回值然後拼接,如:


str=str+new ArrayList();


上面就是調用ArrayList對象的toString方法返回值進行拼接的。再回到前面的問題上,對於str1字符串,Java的執行順序是從左到右,先執行1+2,也就是算數加法運算,結果等於3,然後再與字符串進行拼接,結果就是"3 apples",其形式類似於如下計算:


String str1=(1+2)+"apples";


而對於str2字符串,由於第一個參與運算的是String類型,加上1後的結果是"apples:1",這仍然是一個字符串,然後再與2相加,其結果還是一個字符串,也就是"apples:12"。這說明如果第一個參數是String,則後續的所有計算都會轉變成String類型,誰讓字符串是老大呢!

注意 在「+」表達式中,String字符串具有最高優先級。