【问题标题】:Why does a null value appear in string output?为什么字符串输出中会出现空值?
【发布时间】:2014-02-19 22:23:11
【问题描述】:

当我执行以下代码时,输​​出为“nullHelloWorld”。 Java是如何对待null的?

import java.util.*;
import java.lang.*;
import java.io.*;

/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
    public static void main (String[] args) throws java.lang.Exception
    {
        String str=null;
        str+="Hello World";
        System.out.println(str);
    }
}

【问题讨论】:

  • +1: 滥用字符串连接规则 :) 我不知道。

标签: java string null string-concatenation


【解决方案1】:

您正试图将一个值连接到null。这是由“字符串转换”控制的,当一个操作数是String 时发生,并且被the JLS, Section 5.1.11 覆盖:

现在只需要考虑参考值:

  • 如果引用为 null,则将其转换为字符串“null”(四个 ASCII 字符 n、u、l、l)。

【讨论】:

  • 对于那些在这里寻找一种方法来摆脱这个null的人来说,简单的方法是用空字符串""而不是null来初始化你的变量。
【解决方案2】:

当您尝试将null 连接到+ 运算符时,它实际上会被包含"null" 的String 替换。

这样做的好处是,如果您在 null 变量上显式调用 .toString() 方法,这样您可以避免 NullPointerException,否则您会得到。

【讨论】:

    【解决方案3】:

    Java 将 null 视为无,它是 String 的默认值。它出现在您的字符串输出中,因为您使用+= 将“Hello World”添加到str。

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

    您基本上是在告诉 Java:给我的 str 变量指定 String 的类型并将其赋值为 null;现在添加并分配(+=)String“Hello World”给变量str;现在打印出str

    【讨论】:

      【解决方案4】:

      我的两分钱:

          String str = null;
          str = str.concat("Hello World"); // Exception in thread "main" java.lang.NullPointerException
      

      但是

      str += "Hello World";
      System.out.println(str); // Hello World
      

      【讨论】:

        猜你喜欢
        • 2017-01-13
        • 2021-02-26
        • 1970-01-01
        • 2010-12-11
        • 2013-02-20
        • 1970-01-01
        • 2022-01-08
        • 2014-05-18
        • 1970-01-01
        相关资源
        最近更新 更多