Given:



public class CharToStr {
    public static void main(String[] args) {
        String str1 = "Java";
        char str2[] = {'J', 'a', 'v', 'a'};
        String str3 = null;
            for (char c : str2) {
                str3 = str3 + c;
            }
            if (str1.equals(str3)) 
                System.out.print("Successful");
            else 
                System.out.print("Unsuccessful");
    }
}

What is result?

A.

Successful

B.

Unsuccessful

C. Compilation fails
D. An exception is thrown at runtime

題解

第5行的str3一開始為null,接著在第7行直接使用「+」運算子與字元做字串連接,這樣的方式在Java是可被允許的。參考至null的字串在進行字串連接時會自動被改為長度為4的「null」字串,因此這題的str3變數串接到最後的結果為「nullJava」,「Java」和「nullJava」明顯不是一樣的字串,因此輸出為「Unsuccessful」。

以下再給一個例子:

String str = null;
System.out.println(str + "c");
System.out.println(null + "c");
System.out.println(str + 'c');
System.out.println('n' + 'u' + 'l' + 'l' + 'c');
System.out.println((String)null + 'c');
//System.out.println(null + 'c');

輸出結果為:

nullc
nullc
nullc
542
nullc

這裡要注意的地方是,「+」運算子的運算元必須要至少有一個是字串或是物件,才會被當作是字串連接,否則為加法運算。不知型態的null與字元c(字元值為99)無法做加法運算,因此會發生編譯錯誤。