包装类与基本数据类型
包装类是将基本数据类型封装成一个类,包含属性和名称
使用:
在使用过程中,会涉及到自动装箱和自动拆箱
装箱:
将基本数据类型转换成包装类
Integer i = Integer.valueOf(a);
拆箱:
将包装类转换成基本数据类型
int i2 = b.intValue();
普通类型比较
int1 == integer1,Integer是int的封装类,当Integer与int进行==比较时,Integer就会拆箱成一个int类型,所以还是相当于两个int类型进行比较,这里的Integer,不管是直接赋值,还是new创建的对象,只要跟int比较就会拆箱为int类型,所以就是相等的。
private static void intCompare(){
int int1 = 128;
Integer integer1 = 128;
Integer integer2 = Integer.valueOf(128);
Integer integer3 = new Integer(128);
System.out.println(int1==integer1);
System.out.println(int1 == integer2);
System.out.println(int1 == integer3);
}
包装类型比较
Integer比较的是内存地址,不会经历拆箱过程。
当时在-128到127范围内,有IntegerCache缓存,所以对象是一样的
public static Integer valueOf(int i) {
if (i >= IntegerCache.low && i <= IntegerCache.high)
return IntegerCache.cache[i + (-IntegerCache.low)];
return new Integer(i);
}
在-128-127范围内,不重复创建对象
private static void integerCompare(){
Integer integer1 = 127;
Integer integer2 = Integer.valueOf(127);
Integer integer3 = new Integer(127);
System.out.println(integer1==integer1);
System.out.println(integer1 == integer3);
System.out.println(integer2 == integer3);
}
超过127,每次都创建新的Integer对象
private static void integerCompare2(){
Integer integer1 = 128 ;
Integer integer2 = Integer.valueOf(128);
Integer integer3 = new Integer(128);
System.out.println(integer1==integer2);
System.out.println(integer1 == integer3);
System.out.println(integer2 == integer3);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)