A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 高双武 黑马帝   /  2011-11-16 10:13  /  1594 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

谁能帮忙分析一下这个函数的结果?代码如下
package execisetest;
public class Zhuangxiang {
        public static void main(String [] args){               
                Integer num3=12;
                Integer num4=12;
                Integer num5=129;
                Integer num6=129;
                int num7=129;
                int num8=129;               
                System.out.println(num3==num4);
                System.out.println(num5==num6);
                System.out.println(num7==num8);       
        }
}
输出结果是

true
false
true
为什么第二个输出结果是false?

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

3 个回复

倒序浏览
强子 黑马帝 2011-11-16 10:35:14
沙发
-128到127之间的整数被装箱为Interger对象后
再对-128到127之间的同一个整数Integer装箱操作
都是使用第一次进行装箱操作时生成的对象
129>127所以生成了新的对象

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
本帖最后由 後天__牛永志 于 2011-11-16 10:41 编辑

自动装箱和自动拆箱是java1.5之后才出现的功能。
自动装箱针对于从-128到127之间的值,使用一个实例对象。所以num3==num4,返回的值是true。num5==num6,返回的值是false;
num7和num8是基本数据类型。并且存在栈内存中的,没有对象的引用,比较的是两个值的大小。所以返回的也true。
在Java语言中,整型对象在不同数值范围内的比较分两种情况:
   1:数据在一个字节(-128至127)范围内,则直接从缓存数组中取值,而不再重新创建对象。故此范围的数据对象比较的时候, == 和equals的比较结果都为true.
   2:数据大于一个字节,则新创建一个对应的实例对象。故==得比较结果为false,而equals的比较结果为true.

评分

参与人数 1技术分 +2 收起 理由
admin + 2

查看全部评分

回复 使用道具 举报
坚强 黑马帝 2011-11-16 13:43:55
板凳
  楼上已经很清楚了,正解!

评分

参与人数 1黑马币 +2 收起 理由
admin + 2

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马