为什么在字符串输出中出现空值?

时间:2014-02-19 22:23:12

标签: java string null string-concatenation

当我执行以下代码时,输​​出为“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);
    }
}

4 个答案:

答案 0 :(得分:12)

您正在尝试将值连接到null。这由“字符串转换”控制,当一个操作数是String时,会发生the JLS, Section 5.1.11

  

现在只需要考虑参考值:

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

答案 1 :(得分:7)

当您尝试通过null运算符连接+时,它实际上被包含String的{​​{1}}取代。

关于这一点,一个好处是,如果您在"null"变量上明确调用NullPointerException方法,这样就可以避免.toString(),否则就会得到。{/ p>

答案 2 :(得分:0)

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

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

您基本上是在告诉Java:为str变量指定String类型,并为其指定值null;现在添加(+=String“Hello World”到变量str;现在打印出str

答案 3 :(得分:0)

我的两分钱

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

但是

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