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

时间:2023-03-09 15:50:56
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.

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