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

posted @ 2021-02-22 21:05  八佰山兵上北坡  阅读(58)  评论(0编辑  收藏  举报