当前位置:   article > 正文

java 强制转换 null_JAVA中对null进行强制类型转换(null可以强转为任意对象,并执行对象的静态方法)...

从jaxb强制转换null java.lang.integer会产生0,而不是null

今天很好奇,对null进行强转会不会抛错。做了如下测试得到的结果是,

如果把null强转给对象,是不会抛异常的,本身对象是可以为null的。

但是如果是基本类型,比如 int i = (Integer)obj的强转,其实内部会调用intvalue方法去赋值给基本类型,所以这时候是会报错的。

代码如下

Object obj = null;

Integer s1 = (Integer)obj;

上面能正常执行,即把null赋值给一个对象或者强行类型转换赋值给对象都是没有问题的。如果s1是 int的基本类型呢?

代码如下,编译时不会报错

int s1 = (Integer)obj;

System.out.println(s1);

执行,则报java.lang.NullPointerException错误。

我们反编译后会发现调用了 intValue方法去获取value,所以抛出空指针错误:

Object obj = null;

int s1 = ((Integer)obj).intValue();

System.out.println(s1);

---------------------

public class NULL {

private static final String TAG = "NULL";

private void abc(){

System.out.println("123");

}

public static void main(String[] args) {

((NULL)null).abc();

}

}

以上代码运行时会报错:

Exception in thread "main" java.lang.NullPointerException

at com.test.NULL.main(NULL.java:14)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

at java.lang.reflect.Method.invoke(Method.java:606)

at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)

若将方法abc加上静态修饰符static

public class NULL {

private static final String TAG = "NULL";

private static void abc(){

System.out.println("123");

}

public static void main(String[] args) {

((NULL)null).abc();

}

}

程序正常运行,输出

123

1

null可以被强制类型转换成任意类型的对象,通过这样的方式可以执行对象的静态方法,但如果方法不是静态方法的话,由于null对象并没有被实例化(分配空间),因而运行时会报空指针错误。

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号