2010-01-06 114 views
1
byte[] b1 = null; 
byte[] b2 = null; 

System.out.println(b1 + b2); // 1 
System.out.println("" + b1 + b2); // 2 

如果我取消註釋1給出編譯錯誤。 如果我取消註釋2其打印nullnull;有誰能告訴我這裏發生了什麼事?

所以這裏發生了什麼?

回答

7

第2行是對兩個數組的字符串進行隱式轉換並將它們連接起來,這是有效的。在第一行中,您試圖將add運算符應用於兩個不支持的字節數組。

0

1嘗試添加兩個數組,這兩個數組都是null。這不起作用。

2追加(空值()否則返回null,的toString的結果)的陣列的字符串值爲空字符串

0
  1. 添加操作(+)沒有爲字節數組定義。就那麼簡單。

  2. 字符串的「特殊」+操作很難將各種數據類型轉換爲字符串以使操作正常工作。在這種特殊情況下,將空引用轉換爲String「null」。奇怪,但它可以防止一些錯誤。

之所以(2)並不適用於(1)是,沒有涉及(1),而「」在(2)的強制表達的存在被評估爲字符串字符串。

1
  1. 您可以使用+運算符來處理像這樣的字節數組。所以編譯錯誤。
  2. 最初的雙引號將b1轉換爲b2爲字符串。等同於b1.toString()+ b2.toString()。所以nullnull
0

在1你試圖使用operator +兩個數組,這是沒有在Java中定義。

在2中,您將字符串「」與您的空數組的字符串表示連接在一起。這僅適用於+從左向右解析,所以它被解釋爲字符串連接。將「」移到行的末尾,它也會給你編譯錯誤。

相關問題