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

最近做一些项目时想到基本类型和包装类型的区别,比如: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 之间时,会直接使用缓存中的对象,而不是重新创建一个对象

猜你喜欢

转载自blog.csdn.net/qq_40677590/article/details/103252165
今日推荐