先看一段代码
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; System.out.println(temp); } }
|
上述代码编译时并不报错,但是运行时报空指针异常。
总结:
对null得强转编译器并不会报错。如果把null强转给对象,运行时不会抛异常,因为对象本身可以为null;但是如果把null强转给基本类型,例如上述的int temp=(Integer)obj,会自动调用intValue()方法去赋值给基本类型,所以这时候会报错。