Java基础——int和integer区别详解

本文详细探讨了Java中int与Integer的区别,包括它们的存储方式、默认值以及在不同情况下的比较。Integer是int的包装类,比较时涉及自动拆箱和装箱过程。在(-128,127)范围内,Integer对象会复用缓存,导致相等,否则在堆上创建新对象,不相等。" 51121193,4867791,MFC系统函数应用指南,['MFC'],"['MFC', '系统函数', '当前路径', '系统时间', '打开文件对话框', '保存文件对话框']

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

问题:int a = 1000;int b = 1000;a == b?

再换成integer呢?

int a = 1000,integer b =1000;a == b?

首先我们要知道,Integer是int的包装类,必须经过实例化才能使用。integer实际是对象的引用,当new一个integer时,实际上是生成一个指针指向此对象,而int是直接存储数据值。integer的默认值是null,int的默认值是0。

分类讨论:

第一组

Integer a = new Integer(10);
Integer b = new Integer(10);
a==b?

​ 不相等,此时ab指向的是integer对象的地址

第二组

Intger a = new Integer(10);
int b = 10;
a == b ?

​ 相等,当包装类integer和基本数据对象int比较时,java会自动拆箱valueOf方法,实际上比较的就是两个int变量,只要值相等就相等。

第三组

Integer a = new Integer(10);
Integer b = 10;
a == b?

不相等,a和b的区别是,a是new生成的Integer变量,指向堆中新建的对象,b是非new生成的integer变量,指向Java常量池中的对象,两者在内存中地址不同。

第四组

Integer a = 10;
Integer b = 10;
a == b?

相等,直接声明Integer a = 10时,Java会自动装箱为

Integer a = Integer.valueOf(10);

当a的范围在(-128,127)之内时,第一次声明会将放入缓存中,第二次取缓存中已有的对象,而不是重新创建一个Integer对象。(-128,127)范围内的Integer值可以直接用==判断,但这个区间外的所有数据,都会在堆上产生,不会复用已有对象。

第五组

Integer a = 128;
Integer b = 128;
a == b?

不相等,此时a和b不在(-128,127)内,都会在堆上新产生一个对象。

第六组

int a = 10;
Integer b = 10;
a == b?

相等,根据integer的自动拆箱。

第七组

int a = 128;
Integer b = 128;
a == b?

相等,同上一组,根据integer的自动拆箱。

总结:

Int和Int比较,只要数值相等都相等。

Integer和Integer比较,数值相等时,(-128,127)内的相等,其他的不等。

new Integer 和 new Integer比较,都不相等。

new Integer 和 Integer比较,都不相等。

Int和Integer比较,只要数值相等都相等

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值