2010-01-06 89 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中,您将字符串“”与您的空数组的字符串表示连接在一起。这仅适用于+从左向右解析,所以它被解释为字符串连接。将“”移到行的末尾,它也会给你编译错误。

相关问题