代码拉取完成,页面将自动刷新
所谓包装类,就是能够直接将简单类型的变量表示为一个类,在执行变量类型的相互转换时,我们会大量使用这些包装类。
基本数据类型 | 对应的包装类 |
---|---|
byte | Byte |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
char | Character |
boolean | Boolean |
1. 在Java中,一切皆对象,但八大基本类型却不是对象。
2. 声明方式的不同,基本类型无需通过new关键字来创建而封装类型需new关键字。
3. 存储方式及位置的不同,基本数据类型是直接存储变量的值保存在堆栈中能高效的存取,封装类型需要通过引用指向实例,具体的实例保存在堆中。
4. 初始值的不同,封装类型的初始值为null,基本类型的的初始值视具体的类型而定,比如int类型的初始值为0,boolean类型为false。
5. 使用方式的不同,比如与集合类合作使用时只能使用包装类型。
6. 什么时候该用包装类,什么时候用基本类型,看基本的业务来定:这个字段允允许null值,就需要使用包装类型,如果不允许null值,,使用基本类型就可以了,用到比如泛型和反射调用函数,就需要用包装类!
最基本的一点区别是:Integer是int的包装类,int的初值为0,Integer的初值是null。除此之外还有区别,见以下代码:
public class TestInteger {
public static void main (String[] args){
int i = 128;
Integer i2 = 128;
Integer i3 = new Integer(128);
System.out.println(i == i2); //Integer会自动拆箱为int,所以为true
System.out.println(i == i3); //true,理由同上
Integer i4 = 127; //编译时被变异成:Integer i4 = Integer.valueOf(127)
Integer i5 = 127;
System.out.println(i4 == i5); //true
Integer i6 = 128;
Integer i7 = 128;
System.out.println(i6 == i7); //false
Integer i8 = new Integer(127);
System.out.println(i5 == i8); //false
Integer i9 = new Integer(128);
Integer i10 = new Integer(123);
System.out.println(i9 == i10); //false
}
}
为什么i4
和i5
比是true,而i6
和i7
比是false
呢?关键就是看valueOf()
函数了,这个函数对于-128到127之间的数,会进行缓存,Integer i4 = 127
时,会将127进行缓存,下次再写Integer i5 = 127
时,就会直接从缓存中取,就不会new了。所以i4
和i5
比就是true
,而i6
和i7
比是false
。
以上的情况总结如下:
Integer i2 = 128
的时候,被翻译成:Integer i2 = Integer.valueOf(128)
;而valueOf()
函数会对-128到127之间的数进行缓存。装箱:把基本数据类型转换为包装类,分为自动装箱、手动装箱
拆箱:把包装类转换成基本数据类型,分为自动拆箱、手动拆箱
字符串转换为基本数据类型:
parseXxx()
静态方法valueOf()
方法转换为基本类型的包装类,自动拆箱参考:https://blog.csdn.net/weixin_38361153/article/details/88218744
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。