java自动拆箱、装箱

自动拆箱和装箱仅适用于JDK1.5(包括1.5)以后的版本。它只是编译阶段的概念而与程序的运行无关,主要目的是方便程序员编码,提高效率。

public class AutoBox {
	public static void main(String[] args) {
		//JDK1.4以前的装箱和拆箱
		//装箱-基本类型装换成封装类型
        Integer it = new Integer(10);
         //拆箱-封装类型装换成基本类型
        int i = it.intValue();
        
        //JDK1.5以后
        Integer i1=5;//自动装箱
        System.out.println(i1);
        int i2=it;//自动拆箱
        System.out.println(i2);
	}

}

注意:比较两个Integer类型的数据不能使用“==”,要使用方法equals()。

public class AutoBoxCompare {

	public static void main(String[] args) {
		Integer i1=128;
		Integer i2=128;
		System.out.println(i1==i2);//false
		System.out.println(i1.equals(i2));//true
		
		//上述两式相当于
		Integer i3=new Integer(128);
		Integer i4=new Integer(128);
		System.out.println(i3==i4);//false
		
		//需要注意的是
		Integer i5=127;
		Integer i6=127;
		System.out.println(i5==i6);//true
		
		Integer i7=-128;
		Integer i8=-128;
		System.out.println(i7==i8);//true
		
		Integer i9=-129;
		Integer i10=-129;
		System.out.println(i9==i10);//false
	}

}

通过上面代码注意到Integer类的比较“==”比较的是对象,也可以说是地址,equals()比较的就是内容了。还有就是比较奇怪的地方是当Integer在-128-127取值时比较两个对象返回的是true,原因与String类类似,但又有所不同,对于Integer类来说,当数据位于-128-127时,java会引入一个“整形常量池”,该整形常量池只存储-127~128的数据,当超过这个数据时,会在堆中建立一个对象,所以直接比较对象的话由于地址不同会报错。
String类可以参考 String类详解

发布了19 篇原创文章 · 获赞 2 · 访问量 6492
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章