2021年02月22日java基础第二十二课---包装类以及128陷阱
java基础第二十二课---包装类以及128陷阱
面试题:
public static void main(String[] args) {
Integer num1 = 100;
Integer num2 = 100;
System.out.println(num1 == num2);
Integer num3 = 128;
Integer num4 = 128;
System.out.println(num3 == num4);
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
解析:
答案就在Integet的valueOf()方当中,如果我们的数值在-128-127之间的数值都存储在有一个catch数组当中,该数组相当于一个缓存,当我们在-128-127之间进行自动装箱的时候,我们就直接返回该值在内存当中的地址,所以在-128-127之间的数值用==进行比较是相等的。而不在这个区间的数,需要新开辟一个内存空间,所以不相等。
一、为什么要有包装类
1.在面向对象中,“一切皆对象”,但基本数据类型的数据不太符合这一理念,基本数据类型不是对象
2.涉及到类型之间的转化,数据类型之间的基本操作;如果都有我们自己去实现,那么工作量过大。
所以java针对每一个基本数据类型都设计了一个包装类
二、自动拆装箱
1.装箱:把基本类型数据转成对应的包装类对象。
方式一:Integer i = Integer.value(13);
- 1
方式二:Integer i = new Integer(13);
- 1
2.拆箱:把包装类对象转成对应的基本数据类型数据。
int value = i.intValue();
- 1
自动装箱(Autoboxing)和自动拆箱(AutoUnboxing)
在Java 5之前的版本中,基本数据类型和包装类之间的转换是需要手动进行的,但Sun公司从Java5开始提供了的自动装箱(Autoboxing)和自动拆箱(AutoUnboxing)操作 ;
自动装箱:可以把一个基本类型变量直接赋给对应的包装类型变量。
比如:Integer i = 13;
自动拆箱:允许把包装类对象直接赋给对应的基本数据类型变量。
比如:Integer i = new Integer(13); Int j = i;
有道云笔记更精彩o~
文档:第二十一课—包装类以及128陷阱.note