在java中使用空值进行类型转换时没有例外

String x = (String) null;

为什么这句话没有例外?

String x = null;
System.out.println(x);

它打印 .但方法应引发空指针异常。null.toString()


答案 1

可以强制转换为任何引用类型,而不会出现任何异常。null

该方法不会引发 null 指针,因为它首先检查对象是否为 null。如果为 null,则它只是打印字符串 。否则,它将调用该对象的方法。println"null"toString

添加更多详细信息:在输入对象上打印方法调用方法。在方法中,此检查有助于避免空指针异常:String.valueOf(object)valueOf

return (obj == null) ? "null" : obj.toString();

对于其余的混淆,在 null 对象上调用任何方法都应该抛出 null 指针异常(如果不是特殊情况)。


答案 2

可以强制转换为任何引用类型。您还可以调用将 a 作为参数处理的方法,例如 确实如此,但您不能引用值并对其调用方法。nullnullSystem.out.println(Object)null

顺便说一句,有一个棘手的情况,似乎您可以对值调用静态方法。null

Thread t = null;
t.yield(); // Calls static method Thread.yield() so this runs fine.

推荐