长大后想做什么?做回小孩!

0%

NULL可以被转换为任意类型?

先看一段代码

1
2
3
4
5
6
7
8
9
10
public class Demo1 {

public static void testMethod(){
System.out.println("testMethod()");
}

public static void main(String[] args) {
((Demo1)null).testMethod();
}
}

上述代码的执行结果是:testMethod()

原因:1.null可以被强转为任意类型。2.静态方法与类绑定,不依赖于任何实例。


经过上述结果,引出一些疑问和原理。。。

先看两段代码:

1
2
3
4
5
6
7
public class Demo2 {
public static void main(String[] args) {
Object obj=null;
Integer temp=(Integer) obj;
System.out.println(temp);
}
}

上述代码的执行结果是:null

1
2
3
4
5
6
7
8
public class Demo3 {
public static void main(String[] args) {
Object obj=null;
int temp=(Integer) obj;
//int temp=(int) obj; 结果相同
System.out.println(temp);
}
}

上述代码编译时并不报错,但是运行时报空指针异常。


总结:

对null得强转编译器并不会报错。如果把null强转给对象,运行时不会抛异常,因为对象本身可以为null;但是如果把null强转给基本类型,例如上述的int temp=(Integer)obj,会自动调用intValue()方法去赋值给基本类型,所以这时候会报错。