Integer 和 int

本文探讨了Java中的基本数据类型int和其包装类Integer的区别。int是不可变的基本类型,而Integer是可变的类,提供了额外的方法。在使用`equals()`方法时,对于两个new出来的Integer对象,它们永远不会相等。当Integer与int比较时,Java会自动拆箱比较值,满足`==`。若Integer是通过赋值创建且值在-128到127之间,它们在常量池中,地址相同,因此满足`==`。否则,需要通过`equals()`判断值是否相等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        复习到基本数据类型的时候,发现混淆Integer和int,所以整理相关知识。

        首先,int是java的基本数据类型,也就是immutable的(当作返回值类型的时候,无需防御式拷贝);而Integer的本质是类,所以是mutable的,它是int的包装类,个人理解就是,由于int很常用,所以构造一个Integer,再将一些常用的方法加进去,让它使用起来更方便。

        查阅资料过程中,发现,int和Integer的equals()的结果也有很多学问。

“==”和equals

首先就是明确,java中==的意思是查看地址,而一般java中都是new出来的实例,所以地址都不一样;而像int、String这样的基本数据类型,他们如果一开始就直接赋值(比如:int x=1)这样的变量是放在常量池中的,也就是一个常量就一个,地址是一样的。

在以上的前提下,关于int和Integer的“==”和equals:

1、如果是两个new来的Integer,永远不可能相等(刚刚提过了)

2、如果是Integer 和 int,他们的值相等,那就满足==。这是因为" 包装类Integer和基本数据类型int比较时,java会自动拆包装为int,然后进行比较,实际上就变为两个int变量的比较 "

3、如果是一个是new来的Integer,一个是Integer x = 0 这样来的,那么他们也不满足==,因为直接复制来的实在常量池中,而这地址不可能相等

4、最有意思的是如果是两个赋值来的Integer,当他们的值在-128到127之间,他们满足==;如果其他就不满足。这是因为在此区间内,赋值来的变量都在常量池中(一个值仅一个)所以他们一定地址相同,满足==。而此区间之外,就需要通过new来,所以不满足==。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值