java包装类问题public static void main(String[] args){\x09\x09\x09\x09Integer i1=1;\x09\x09Integer i2=1;\x09\x09\x09System.out.println("i1="+i1);\x09\x09System.out.println("i2="+i2);\x09\x09System.out.println(i1==i2);\x09\x09\x09\x09Integer i3=12

来源:学生作业帮助网 编辑:作业帮 时间:2024/05/11 20:57:38
java包装类问题public static void main(String[] args){\x09\x09\x09\x09Integer i1=1;\x09\x09Integer i2=1;\x09\x09\x09System.out.println(

java包装类问题public static void main(String[] args){\x09\x09\x09\x09Integer i1=1;\x09\x09Integer i2=1;\x09\x09\x09System.out.println("i1="+i1);\x09\x09System.out.println("i2="+i2);\x09\x09System.out.println(i1==i2);\x09\x09\x09\x09Integer i3=12
java包装类问题
public static void main(String[] args){\x09\x09
\x09\x09Integer i1=1;
\x09\x09Integer i2=1;\x09
\x09\x09System.out.println("i1="+i1);
\x09\x09System.out.println("i2="+i2);
\x09\x09System.out.println(i1==i2);
\x09\x09
\x09\x09Integer i3=128;
\x09\x09Integer i4=128;\x09
\x09\x09System.out.println("i3="+i3);
\x09\x09System.out.println("i4="+i4);
\x09\x09System.out.println(i3==i4);\x09
\x09\x09
\x09}
为什么i1,i2值都是1,输出是true,而i3,i4的值都是128,输出时false?事关包装类,各种不懂

java包装类问题public static void main(String[] args){\x09\x09\x09\x09Integer i1=1;\x09\x09Integer i2=1;\x09\x09\x09System.out.println("i1="+i1);\x09\x09System.out.println("i2="+i2);\x09\x09System.out.println(i1==i2);\x09\x09\x09\x09Integer i3=12
==是用来比较两个基本数据类型的变量值是否相等,==也用于判断两个对象引用名称是否参考至同一个对象.在自动装箱时对于值从–128到127之间的值,它们被装箱为Integer对象后,会存在内存中被重用(就是说内存指向相同).
所以造成 System.out.println(i1==i2); 输出true
如果超过了从–128到127之间的值,被装箱后的Integer对象并
不会被重用(指向了新的内存地址),即相当于每次装箱时都新建一个Integer对象
所以System.out.println(i3==i4); 输出false
总结:–128到127之间的值内存空间引用的是同一个地址,超出则存在新的内存空间