网站建设需要编码不,模仿网站属于侵权吗,望野眼上海话,南京关键词seo公司文章目录 环境问题答案说明解决办法其它总结 环境
Windows 11 专业版Java 21
问题
下面这段代码的运行结果是什么#xff1f; Integer i1 0;int i2 0;for (int n 0; n 200; n) {if (i1 ! i2) {System.out.println(i1 i1 , i2 i2);b… 文章目录 环境问题答案说明解决办法其它总结 环境
Windows 11 专业版Java 21
问题
下面这段代码的运行结果是什么 Integer i1 0;int i2 0;for (int n 0; n 200; n) {if (i1 ! i2) {System.out.println(i1 i1 , i2 i2);break;}i1;i2;}Integer i3 0, i4 0;for (int n 0; n 200; n) {if (i3 ! i4) {System.out.println(i3 i3 , i4 i4);break;}i3;i4;}答案
运行结果如下
i3 128, i4 128说明
Integer 是一个引用类型它包装了基本primitive数据类型 int 。对于Integer类型在 -128 到 127 这个区间的值Java会将其缓存起来。
所以当使用 比较两个Integer对象时
如果它们的值在这个缓存区间内实际上比较的是缓存中的同一个对象所以表现为比较数值。当Integer对象的值大于127或者小于-128时每次创建Integer对象都是一个新的对象 比较的是对象的引用而不是对象所包装的数值。
如果是Integer和int做数值比较那么Integer会自动拆箱unboxing为int所以可以直接用 来比较。
注要留意Integer对象为null的情况。
解决办法
要对Integer做数值比较
equals() Integer类重写了Object类的equals()方法用于比较两个Integer对象所包装的数值是否相等。intValue() 直接转换为int类型
其它
需要注意的是如果使用了 List 等数据结构其中的元素都是对象例如
list1.add(1234);它会自动装箱boxing实际存储的元素是Integer类型。如果要对List里面的元素做数值比较别忘了转换为int类型。
总结
Integer 和 int 做比较时可以直接用 来判断Integer 和 Integer 做比较时最好用 equals() 方法做比较或者转化为 intValue() 进行数值比较集合里存储的都是 Object 对于 int 数值会自动装箱为 Integer 在读取元素时别忘了是 Integer 类型的若要比较数值最好转换为int类型