JAVA的代码输入为何不同!

来源:百度知道 编辑:UC知道 时间:2024/06/08 14:07:10
Integer num1=280;
Integer num2=280;
system.out.println(num1==num2); //其输出值为false

Integer num1=80;
Integer num2=80;
System.out.println(num1==num2); //其输出值为true

代码相同,只不过是赋值不同,为什么他们的输出结果完全相反呢?小弟刚入门,请帮忙一解!越明白越好!

应该是280已经超出了基础类型自动加包和自动解包的范围
这里主要是自动解包
num1==num2这句话实际上的真正在虚拟机上运行的过程是,先将num1和num2这两个对象自动的转换成int的基础类型而进行比较,对于这题中第一个280的是无法自动从integer类的对象解包成int的基础类型的,因为超出了
而对于第二个的num比较,实际上是int类型在比较即数值之间的比较,而不是对象之间的比较,如果是对象之间的比较,它要比较之间的地址是不是一样
这样说你明白了吗

这是JAVA包装类里面的小问题,
就是在一个字节以内的包装类和大于一个字节的包装类原理是不一样的。
所以这个是要记忆的,你也可以试试其他的包装类
很多都是在一个字节内外会有问题
还有小数的.0 和其他的如.1 .2的包装类就不一样,可以看看

小于127的数才会自动拆包比较,所以两个值为80的Integer对象使用"=="时候是自动拆包成short比较的,会相等,当值为280时不能自动拆包,两个不同的Integer引用就是不相等的,这时候需要用num1.euqals(num2)来比较.

这是java的关于八大基本封装类的知识,其实只要注意一点就行了,小于127的正整数就是true,大于的自然是false了,当做一个小点记住就行了;