java5 自动装箱(AutoBoxing)引来了意想不到的空指针异常

Java 5 引进了自动装箱(Autoboxing),它一直是一个非常便利的特性。有了它以后,基本类型与其包装类基本上没有多大的区别了。但是,这样的一个机制在我们的程序非常复杂的时候可能会出现一个意想不到的异常,下面我们来看看这个是怎么引起的?

首先,我们定义一个类:

class Foo {
	Integer value;

	public Foo() {}

	public Foo(Integer value) {
		this.value = value;
	}

	public int getValue() {
		return value;
	}

	public void setValue(Integer value) {
		this.value = value;
	}
}

这是一个非常普通的类,定义一个字段以及它的读写属性,但是,当我们用这个属性的时候,我们就有可能出现意想不到的异常。

public class AutoBoxing {
	public static void main(String[] args) {
		Foo fooOne = new Foo(2);
		System.out.println(fooOne.getValue());
		Foo foo = new Foo();
		System.out.println(foo.getValue());
	}
}

上面的这段代码将会出现空指针异常,那么是什么原因呢?那是因为java5的这个新特性搞得鬼,也就是说,当一个Integer的对象要被当作一个int返回的时候,这个特性会帮我们自动调用intValue()方法,所以会出现异常。由于我们的这个程序很简单,所以出现问题之后也很容易解决,但是当我们的程序十分复杂之后,我们在表面上根本看不出问题,所以我们以后在编写程序的时候,不要忽略一些新特性的内部的一些机制,否则程序出错以后,会很难找到其原因。

你可能感兴趣的:(自动装箱,jdk1.5新特性)