为什么在字符串输出中出现空值?
当我执行以下代码时,输出为“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