什么是包装类?

目录

1. 什么是包装类

2. 包装类赋值

3. 装箱(装包)和拆箱(拆包)

装箱:把基本数据类型变成对应的包装类型

自动装箱:

手动装箱:

拆箱:把包装类型变成基本数据类型

自动拆箱:

手动拆箱:

4. 面试题:下面代码输出什么?为什么?

5. 题目2


1. 什么是包装类

基本数据类型对应的类类型就是包装类。

什么是包装类?_第1张图片

2. 包装类赋值

什么是包装类?_第2张图片

3. 装箱(装包)和拆箱(拆包)

装箱:把基本数据类型变成对应的包装类型

什么是包装类?_第3张图片

自动装箱:

(红色框框)

 

我们发现,底层会默认调用valueOf方法。


手动装箱:

(蓝色和橘色框框)

拆箱:把包装类型变成基本数据类型

什么是包装类?_第4张图片  

自动拆箱:

什么是包装类?_第5张图片 

我们发现,底层会默认调用intValue方法。 


手动拆箱:

什么是包装类?_第6张图片

什么是包装类?_第7张图片

手动调用doubleValue方法

4. 面试题:下面代码输出什么?为什么?

对于引用数据类型来说,== 比较的是里面存的地址。

什么是包装类?_第8张图片

原因分析:

首先,自动装箱,调用了valueOf方法。

什么是包装类?_第9张图片 

可以看到:

当 i 在 [low,high] 这个范围内,会返回一个数组的元素。否则返回一个新的对象。 

我们可以大胆猜测,a1等于a2,a3不等于a4的原因就是一个走了上面分支,一个返回了新对象。

那么,

我们可能会有以下疑问:low 和 high是多少?cache又是个什么东西?

什么是包装类?_第10张图片

所以 low = -128,high = 127

看绿色框框,cache数组被static 和 final 修饰,static表示唯一,final修饰引用cache,表示引用中的值不能修改,即引用的指向不能改变,只能指向cache这个数组

什么是包装类?_第11张图片

由上述代码可知,cache数组长度为:127-(-128)+1 = 256 数组的每个元素都是一个Integer对象

0下标放的-128,1下标放的-127 ...... 255下标放的127 

所以,当我们赋的值在-128~127之间时,都会去数组cache里面取值,每次取的都是同一个Integer对象,是同一个地址,所以a1等于a2

当赋的值不在这个范围内,就会new对象,得到的是新的地址。所以a3不等于a4。

好处:这些频繁使用的小的数据,不需要每次使用都进行创建对象了。

5. 题目2

什么是包装类?_第12张图片

a1和a3赋值方式底层是一模一样的。会调用valueOf方法。100在-128~127之间,取的是同一个数组下标,地址一样,所以a1等于a3

而a2直接new了一个对象。地址不一样。所以a2不等于a1,也不等于a3。

 

你可能感兴趣的:(Java数据结构与算法,java,开发语言,后端)