当我执行以下代码时,输出是"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()
方法,否则您将获得
Java 将 null 视为无,它是字符串的默认值。它出现在您的字符串输出中,因为您使用 +=
将"Hello World"添加到str
。
String str=null;
str+="Hello World";
System.out.println(str);
你基本上是在告诉Java:给我的str
变量String
的类型并赋予它值null
;现在添加并分配(+=
)String
"Hello World"给变量str
;现在打印出str
我的两分钱:
String str = null;
str = str.concat("Hello World"); // Exception in thread "main" java.lang.NullPointerException
但
str += "Hello World";
System.out.println(str); // Hello World