• java自己主动打开包装盒很容易导致两个误区


    从J2SE 5.0开始提供基本数据类型的自己主动装箱(autoboxing)、拆箱(unboxing)功能。

    何为自己主动装箱:

    当我们创建一个Integer对象时,却能够这样:

     Integer i = 100; (注意:不是 int i = 100; )

    实际上,运行上面那句代码的时候,系统为我们运行了:Integer i = new Integer(100); 此即基本数据类型的自己主动装箱功能。

    何为自己主动拆箱

    自己主动拆箱(unboxing),也就是将对象中的基本数据从对象中自己主动取出。例如以下可实现自己主动拆箱:

    Integer integer=100;

    int flag=integer;  //该语句即实现了自己主动拆箱。

    在进行编译时,编译器再自己主动依据您写下的语句,推断是否进行自己主动装箱动作。

    错误一:NullPointerException

    例如以下程序在编译时不会出错,在执行时则会报NullPointerException

    Integer i = null;
    int j = i;


    这种语法在编译时期是合法的,可是在执行时期会有错误,由于这种写法相当于:
    Integer i = null;
    int j = i.intValue();

    null表示i没有參考至不论什么的对象实体。它能够合法地指定给对象參考名称。因为实际上i并没有參考至不论什么的对象,所以也就不可能操作intValue()方法,这样上面的写法在执行时会出现NullPointerException错误。


    错误二:NoSuchMethodError

    java在进行编译时期,会自己主动进行装箱拆箱操作,当我们编译结束,生成的.class文件后。该.class二进制文件肯定将Integer对象和基本数据类型差别对待。

    错误重现:

    步骤一:编译Student类

    public class Student {
       public int getStudents(int flag){
    	   return flag;
       }
    }

    
    步骤二:编译并执行Teacher类。无不论什么问题
    

    public class Teacher {
    
    	private static Student student=new Student();
    	public static void main(String[] args) {		
    		System.out.println(getTeacherCount(3));
    	}
    	public static int getTeacherCount(Integer integer) {
    		return student.getStudents(3);
    	}
    }

    步骤三:

    我们改动Student类。并编译

    <pre name="code" class="java" style="color: rgb(51, 51, 51); line-height: 20px; ">public class Student {
       public Integer getStudents(Integer integer){
    	   return integer;
       }
    }

    
    
    步骤四。

    又一次执行Teacher类中的main方法,报错NoSuchMethodError.



    版权声明:本文博客原创文章,博客,未经同意,不得转载。

  • 相关阅读:
    最长回文子串(马拉车)
    ubutun 启动/停止/重启MySQL数据库
    臭大佬_LZW
    Beauty Contest(求凸包最大直径)
    Smallest Bounding Rectangle(最小面积外接矩形)
    Triangle(求凸包最大内接三角形)
    P4196 [CQOI2006]凸多边形
    P4724 【模板】三维凸包(简洁)
    P2600 [ZJOI2008]瞭望塔【半平面交】
    退役记
  • 原文地址:https://www.cnblogs.com/lcchuguo/p/4614511.html
Copyright © 2020-2023  润新知