Java基础-----JDK1.5的新特性自动装箱和拆箱

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/yuming226/article/details/84729670
JDK1.5的新特性

1、自动装箱:把基本类型转换为包装类类型。
2、自动拆箱:把包装类类型转换为基本类型。

注意:在使用,Integer x = null;代码就会出现NullPointerException。

package StringBufferPackage;

public class Test4 {
	public static void main() {
		int x = 100;
		Integer i1 = new Integer(x);//将基本数据类型包装成对象,装箱。
		int y = i1.intValue();//将对象转换为基本数据类型,拆箱。
		
		Integer i2 = 100;//自动装箱,把基本数据类型转换为对象。
		int z = i2 + 200;//自动拆箱,把对象转换为基本数据类型。
		
		Integer i3 = null;
		int a = i3 + 100;//底层i3调用intValue,但是i3是null,null调用方法就会出现空指针异常
		System.out.println(a);
	}
}

Integer的面试题
package StringBufferPackage;

public class Test5 {
	public static void main(String[] args) {
	Integer i1 = new Integer(19);
		Integer i2 = new Integer(19);
		System.out.println(i1 == i2);//false
		System.out.println(i1.equals(i2));//true
		System.out.println("---------------------------");
		
		Integer i1 = new Integer(197);
		Integer i2 = new Integer(197);
		System.out.println(i1 == i2);//false
		System.out.println(i1.equals(i2));//true
		System.out.println("---------------------------");
		
		Integer i3 = 127;
		Integer i4 = 127;
		System.out.println(i3 == i4);//true
		System.out.println(i3.equals(i4));//true
		System.out.println("------------------------");
		
		Integer i5 = 128;
		Integer i6 = 128;
		System.out.println(i5 == i6);//false
		System.out.println(i5.equals(i6));//true
		
	}
}

-128到127是byte的取值范围,如果在这个取值范围内,自动装箱就不会新创建对象,而是从常量池中获取,如果超过了byte的取值范围就会再新创建对象。

static final Integer cache[];
public static Integer valueOf(int i) {
        if (i >= IntegerCache.low && i <= IntegerCache.high)
            return IntegerCache.cache[i + (-IntegerCache.low)];
        return new Integer(i);
    }

对于同过Integer i = 2这样的方式,底层为什么会调用valueOf方法还不太清楚,期望可以得到高人指点。

猜你喜欢

转载自blog.csdn.net/yuming226/article/details/84729670