0
点赞
收藏
分享

微信扫一扫

Java包装类及128陷阱

一ke大白菜 2022-03-22 阅读 49

面试题:

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);
}


解析:

答案就在Integet的valueOf()方当中,如果我们的数值在-128-127之间的数值都存储在有一个catch数组当中,该数组相当于一个缓存,当我们在-128-127之间进行自动装箱的时候,我们就直接返回该值在内存当中的地址,所以在-128-127之间的数值用==进行比较是相等的。而不在这个区间的数,需要新开辟一个内存空间,所以不相等。

一、为什么要有包装类
1.在面向对象中,“一切皆对象”,但基本数据类型的数据不太符合这一理念,基本数据类型不是对象
2.涉及到类型之间的转化,数据类型之间的基本操作;如果都有我们自己去实现,那么工作量过大。

所以java针对每一个基本数据类型都设计了一个包装类


二、自动拆装箱
1.装箱:把基本类型数据转成对应的包装类对象。

方式一:Integer i = Integer.value(13);

方式二:Integer i = new Integer(13);

2.拆箱:把包装类对象转成对应的基本数据类型数据。

int value = i.intValue();

自动装箱(Autoboxing)和自动拆箱(AutoUnboxing)
在Java 5之前的版本中,基本数据类型和包装类之间的转换是需要手动进行的,但Sun公司从Java5开始提供了的自动装箱(Autoboxing)和自动拆箱(AutoUnboxing)操作 ;
自动装箱:可以把一个基本类型变量直接赋给对应的包装类型变量。
比如:Integer i = 13;
自动拆箱:允许把包装类对象直接赋给对应的基本数据类型变量。
比如:Integer i = new Integer(13); Int j = i;
 

举报

相关推荐

java128陷阱

128陷阱

Java核心卷——128陷阱

简述128陷阱

java:包装类

Java: 包装类

【Java】包装类

实例+源码 = 看破128陷阱

0 条评论