基本类型和包装类型的区别还不清楚?看这篇就够了

最近做一些项目时想到基本类型和包装类型的区别,比如:int->Integer,double->Double等主要区别有以下几点

1.包装类型可以为空,而基本类型必须初始化:

private Integer age;private double money;age使用了包装类型可以为空,此时还没有分配内存空间,money使用的是double,此时值是存储在栈里,所以需要初始化。(string特殊)。

同时阿里巴巴开发手册这样说:数据库的查询结果可能是 null,如果使用基本类型的话,因为要自动拆箱(将包装类型转为基本类型,比如说把 Integer 对象转换成 int 值),就会抛出 NullPointerException 的异常。

2.包装类型可用于泛型,而基本类型不可以

List<int> list = new ArrayList<>(); // 提示 Syntax error, insert "Dimensions" to complete ReferenceType
List<Integer> list = new ArrayList<>();

3.存储地址和高效性

我们在使用包装类型的时候,相当于是object的存储方式,相比之下值存储在栈里,栈的存取速率是要快于堆的,所以一般我们使用值类型更加高效。

4.包装类型的值比较(string 特殊):

两个包装类型的值相同,但比较结果却是出乎意料:
 

Integer a= new Integer(10);
Integer b= new Integer(10);

System.out.println(a== b); // false
System.out.println(a.equals(b)); // true

由于包装类型是对象,==是比较栈里的引用,而equal是比较堆里的值

5.装箱和拆箱

包装转转成值类型是拆箱,反过来就是装箱,我们来看看下面几个比较:

int a = 100;
Integer b = 100;
System.out.println(a == b);//true
Integer c = 100;
Integer d = 100;
System.out.println(c == d);//true
c = 200;
d = 200;
System.out.println(c == d);//false
 

是不是很意外?我希望大家记住一点:当需要进行自动装箱时,如果数字在 -128 至 127 之间时,会直接使用缓存中的对象,而不是重新创建一个对象

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值