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