代码之家  ›  专栏  ›  技术社区  ›  GuruKulki

Java中的那些连接发生了什么?

  •  1
  • GuruKulki  · 技术社区  · 15 年前
    byte[] b1 = null;
    byte[] b2 = null;
    
    System.out.println(b1 + b2);    // 1
    System.out.println("" + b1 + b2); // 2
    

    如果我取消注释1,它将给出编译错误。
    如果我取消2的注释,它将打印空值空值;

    那么这里发生了什么?

    5 回复  |  直到 6 年前
        1
  •  7
  •   Klaus Byskov Pedersen    15 年前

    第2行对两个数组的字符串进行隐式强制转换,并将它们连接起来,这是有效的。在第一行中,您试图将添加运算符应用于两个字节数组,这是不受支持的。

        2
  •  1
  •   bdhar    15 年前
    1. 对这样的字节数组使用+运算符。所以编译错误。
    2. 初始双引号将b1到b2转换为字符串。相当于b1.ToString()+b2.ToString()。因此零空
        3
  •  0
  •   Thomas Lötzer    15 年前

    1尝试添加两个数组,这两个数组都为空。这不起作用。

    2将数组的字符串值(空值为空,否则为ToString()的结果)附加到空字符串

        4
  •  0
  •   Carl Smotricz    15 年前
    1. 没有为字节数组定义添加操作(+)。很简单。

    2. 字符串的“特殊”+操作很难将各种数据类型转换为字符串以使操作正常工作。在这种特殊情况下,将空引用转换为字符串“null”。很奇怪,但它可以防止一些错误。

    (2)不适用于(1)的原因是(1)中不包含字符串,而(2)中的“”强制将表达式计算为字符串。

        5
  •  0
  •   rui    15 年前

    在1中,您试图在两个数组中使用运算符+,这两个数组在Java中没有定义。

    在2中,您将字符串“”与空数组的字符串表示形式相连接。这只起作用,因为+从左向右解析,所以它被解释为字符串串联。将“”移动到行的末尾,它还将提供编译错误。