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

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

您正在尝试将值连接为null 。 这由“字符串转换”控制,当一个操作数是一个String时发生,并且由JLS涵盖,第5.1.11节 :

现在只需要考虑参考值:

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

当您尝试通过+运算符连接null ,它实际上被包含"null"String替换。

关于这一点的一个NullPointerException是,如果你在null变量上显式调用.toString()方法,这样就可以避免NullPointerException ,否则你会得到它。

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