码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2015-07-01 21:54:15      阅读:121      评论:0      收藏:0      [点我收藏+]

标签:

从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.



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

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

标签:

原文地址:http://www.cnblogs.com/lcchuguo/p/4614511.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!