byte[] b1 = null;
byte[] b2 = null;
System.out.println(b1 + b2); // 1
System.out.println("" + b1 + b2); // 2
如果我取消註釋1給出編譯錯誤。 如果我取消註釋2其打印nullnull;有誰能告訴我這裏發生了什麼事?
所以這裏發生了什麼?
byte[] b1 = null;
byte[] b2 = null;
System.out.println(b1 + b2); // 1
System.out.println("" + b1 + b2); // 2
如果我取消註釋1給出編譯錯誤。 如果我取消註釋2其打印nullnull;有誰能告訴我這裏發生了什麼事?
所以這裏發生了什麼?
第2行是對兩個數組的字符串進行隱式轉換並將它們連接起來,這是有效的。在第一行中,您試圖將add運算符應用於兩個不支持的字節數組。
1嘗試添加兩個數組,這兩個數組都是null。這不起作用。
2追加(空值()否則返回null,的toString的結果)的陣列的字符串值爲空字符串
添加操作(+)沒有爲字節數組定義。就那麼簡單。
字符串的「特殊」+操作很難將各種數據類型轉換爲字符串以使操作正常工作。在這種特殊情況下,將空引用轉換爲String「null」。奇怪,但它可以防止一些錯誤。
之所以(2)並不適用於(1)是,沒有涉及(1),而「」在(2)的強制表達的存在被評估爲字符串字符串。
在1你試圖使用operator +兩個數組,這是沒有在Java中定義。
在2中,您將字符串「」與您的空數組的字符串表示連接在一起。這僅適用於+從左向右解析,所以它被解釋爲字符串連接。將「」移到行的末尾,它也會給你編譯錯誤。