java自动拆箱装箱易导致的两个错误
2014-07-07 19:42
148 查看
自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
这样的语法在编译时期是合法的,但是在运行时期会有错误,因为这种写法相当于:
null表示i没有参考至任何的对象实体,它可以合法地指定给对象参考名称。由于实际上i并没有参考至任何的对象,所以也就不可能操作intValue()方法,这样上面的写法在运行时会出现NullPointerException错误。
错误二:NoSuchMethodError
java在进行编译时期,会自动进行装箱拆箱操作,当我们编译结束,生成的.class文件后,该.class二进制文件肯定将Integer对象和基本数据类型区别对待。
错误重现:
步骤一:编译Student类
步骤二:编译并运行Teacher类,无任何问题
步骤三:
我们修改Student类,并编译
步骤四,
重新运行Teacher类中的main方法,报错NoSuchMethodError.
何为自动装箱:
当我们创建一个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.
相关文章推荐
- Java 自动装箱导致的性能问题
- ECLIPSE导入一个工程报了如下两个错误 (其中一个是The type java.lang.Object cannot be resolved )
- java 自动装箱与拆箱 中的陷阱
- Java编译水平设置错误导致项目无法编译的解决
- Java学习第七课...枚举.自动装箱.静态导入...-asp.net关注
- 两个log4j导致的错误现象
- java中 interger自动装箱拆箱
- day7 常用类字符串处理类--String、StringBuffer、StringBuilder 自动装箱、拆箱 Object类 Java 的异常处理机制
- java基本数据类型及其所对应对象的自动装箱,new,valueof操作研究
- Java的package语法功能导致的执行错误
- java 自动装箱与拆箱 中的陷阱
- 自动检测并行 Java 程序中的错误
- 自动检测并行 Java 程序中的错误
- Java编程之自动装箱与拆箱
- java---自动装箱和自动取消装箱
- awstats进行自动更新时出现的两个错误
- Java的自动装箱陷阱
- 关于oracle设置不活动自动断开连接导致java访问数据库时发生异常的问题
- ADO在查询视图时自动添加rowid,导致Ora 1445错误
- 利用Log4j和MSN Java Lib 实现系统错误日志自动发送到MSN Messenger