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