String x = (String) null;
为什么这个说法没有例外?
String x = null;
System.out.println(x);
它输出null。但是. tostring()方法应该抛出空指针异常。
String x = (String) null;
为什么这个说法没有例外?
String x = null;
System.out.println(x);
它输出null。但是. tostring()方法应该抛出空指针异常。
当前回答
可以将null转换为任何引用类型。你也可以调用将空值作为参数处理的方法,例如System.out.println(Object),但是你不能引用空值并调用它的方法。
顺便说一句,有一个棘手的情况,似乎你可以调用空值的静态方法。
Thread t = null;
t.yield(); // Calls static method Thread.yield() so this runs fine.
其他回答
强制转换空值对于以下构造是必需的,其中一个方法是重载的,如果将null传递给这些重载的方法,那么编译器不知道如何清除歧义,因此我们需要在这些情况下强制转换null:
class A {
public void foo(Long l) {
// do something with l
}
public void foo(String s) {
// do something with s
}
}
new A().foo((String)null);
new A().foo((Long)null);
否则,您无法调用所需的方法。
这是有意为之。可以将null转换为任何引用类型。否则你就不能把它赋值给引用变量。
这在使用可能具有歧义的方法时非常方便。例如:JDialog具有以下签名的构造函数:
JDialog(Frame, String, boolean, GraphicsConfiguration)
JDialog(Dialog, String, boolean, GraphicsConfiguration)
我需要使用这个构造函数,因为我想设置GraphicsConfiguration,但我没有这个对话框的父项,所以第一个参数应该为空。使用
JDialog(null, String, boolean, Graphicsconfiguration)
是模棱两可的,所以在这种情况下,我可以通过将null转换为支持的类型之一来缩小调用:
JDialog((Frame) null, String, boolean, GraphicsConfiguration)
打印:
打印一个对象。由string . valueof (Object)方法生成的字符串被转换为字节
返回对象的值:
如果参数为null,则字符串等于"null";否则,返回obj.toString()的值。
当对象为空时,它将简单地返回值为“null”的字符串。
可以将null转换为任何引用类型。你也可以调用将空值作为参数处理的方法,例如System.out.println(Object),但是你不能引用空值并调用它的方法。
顺便说一句,有一个棘手的情况,似乎你可以调用空值的静态方法。
Thread t = null;
t.yield(); // Calls static method Thread.yield() so this runs fine.