Integer 和 int

        复习到基本数据类型的时候,发现混淆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来,所以不满足==。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值