【问题标题】:Concat operation on string and null keyword对字符串和 null 关键字的 concat 操作
【发布时间】:2013-10-10 15:34:10
【问题描述】:

据我了解,当 + 运算符与两个字符串文字一起使用时,会调用 concat 方法来生成预期的字符串。 示例 - String s = "A" + "B";

当有 null 代替下面的一个文字时,它会在输出下方生成。 我在这里很困惑 - 为什么它不抛出NullPointerException

    String str = null + "B";
    System.out.println(str);

输出:

nullB

【问题讨论】:

    标签: java string null concat


    【解决方案1】:

    为什么不抛出NullPointerException

    因为字符串连接对不是String类型的操作数应用字符串转换操作,在这种情况下是null引用。字符串连接转换为:

    String str = new StringBuilder("null").append("B").toString();
    

    不会抛出NPE

    来自JLS §5.1.11 - String Conversion

    然后通过字符串转换将这个引用值转换为String类型。 [...]

    • 如果引用为null,则将其转换为字符串"null"(四个ASCII字符null)。

    【讨论】:

    • 您的代码不正确,关于 oracle 文档,new StringBuilder(null) 会抛出 NPE。 docs.oracle.com/javase/7/docs/api/java/lang/…
    • @RamonBoza 啊!打错了现在修好了。
    • 另见JLS §5.18.1;第一句直接指5.1.11。
    • @Downvoter 请注意你的否决票,因为我已经修复了那里的小错误。
    【解决方案2】:

    因为您要连接两个字符串,所以str 不为空。当你使用 + 连接两个字符串时,它也需要 null 是一个字符串。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-07-14
      • 2012-09-27
      • 1970-01-01
      • 2016-06-29
      • 2019-03-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多