Integer 和 int 自动拆箱、装箱问题

常量池(constant pool)

基本数据类型在初始化时候会存储在内存中一块特殊的位置,这块特殊的位置就叫做常量池(为什么会有常量池这种东西存在我在这里不做阐述,可以看看java虚拟机内存分析)。

int / Integer 在内存中的位置

在这里插入图片描述

int a =1 和Integer a1 =1 其实是一种形式,只不过Integer a1 =1 最终是做了拆箱,和 int a =1 是一个东西 ,这里没有用new关键字而是直接赋值,内存分析如下,首先会查找常量池中有没有该数据,如果有则直接返回引用,如果没有则在常量池中创建该数据再返回引用。

Integer c1 =new Integer(1),内存分析如下:首先查找常量池有没有该数据,如果没有则首先在栈内存创建该引用(c1),在堆内存创建具体对象(new Integer(1)),并且在常量池中创建该对象,返回栈内存的引用;如果有则直接返回栈内存地址的引用。

== 比较说明

比较基本数据类型:值是否相等

比较引用类型:比较引用是否相等(具体点:内存地址引用是否相同)

在这里插入图片描述

new Integer(int num) 和int 比较会做强制转换。用new形式创建Integer和int比较,会将new Integer()强制转换成int类型。

在这里插入图片描述

在这里插入图片描述

jvm中常量池位置

  1.7之前,存在于方法区。
  1.7,存在于永久代
  1.7之后,存在于元空间,就是pc直接内存,因为1.8删除了永久代。

equals()方法

   直接看Integer重写Object的equals方法,直接比较的具体指是否相等。值相等即为true。

参考 https://www.jianshu.com/p/2d2b5b35410c

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值