zoukankan      html  css  js  c++  java
  • JAVA中对null进行强制类型转换(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对象并没有被实例化(分配空间),因而运行时会报空指针错误。

  • 相关阅读:
    【URAL1039】Anniversary Party
    【POJ2480】Longge's problem
    【POJ2478】Farey Sequence
    【HDU2157】How many ways??
    【NOI2012】随机数生成器
    【HDU3306】Another kind of Fibonacci
    【HDU2604】Queuing
    【HDU1757】A Simple Math Problem
    【HDU1575】Tr A
    【HDU1521】排列组合
  • 原文地址:https://www.cnblogs.com/renyuanwei/p/11767276.html
Copyright © 2011-2022 走看看