Integer和int之间的几个问题
1、Integer 类实例变量与 int 类型数据进行 == 比较的时候,如果值是相等的,那么将返回 true;因为在比较的时候,Integer会自动拆箱为int类型。
Integer num1 = new Integer(17); int num2 = 17; System.out.print(num1 == num2); // true
2、new出来的Integer类对象与自动装箱得到的Integer类对象,即便是值一样,在进行==比较时返回的是false;因为自动装箱得到的Integer类对象指向的是Java常量池中的对象,而new出来的Integer类对象指向堆内存中的地址。
Integer num1 = new Integer(17);
Integer num2 = 17;
Integer num3 = Integer.valueOf(17);
System.out.print(num1 == num2); // false
System.out.print(num1 == num3); // false
System.out.print(num2 == num3); // true
Integer num4 = 200;
Integer num5 = Integer.valueOf(200);
System.out.print(num4 == num5); // false
3、自动装箱得到的Integer类对象,在值范围为-128—127之间的时候,值相等返回的是true;超出此范围,即使值相等也是false。首先,在编辑时,Integer i = 17会翻译为Integer i = Integer.valueOf(17);valueOf()方法的源码实现如下:
public static Integer valueOf(int i){ assert IntegerCache.high >= 127; if (i >= IntegerCache.low && i <= IntegerCache.high){ return IntegerCache.cache[i + (-IntegerCache.low)]; } return new Integer(i); }
也就是说该方法将始终缓存-128到127范围内的值,只会在超出缓存范围值时才会new一个新的Integer类对象。
分类:
JavaSE基础
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库