版权声明:本文为博主原创文章,未经博主允许不得转载。 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方法还不太清楚,期望可以得到高人指点。