有没关于做动画设计师的网站建站公司佛山
文章目录
- 环境
 - 问题
 - 答案
 - 说明
 - 解决办法
 - 其它
 - 总结
 
环境
- 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类型 
