Integer n=2;
Integer m=2;
System.out.println(new String().valueOf(m==n));竟然输出"true"== 不是判断对象引用是否相同的吗?难道m和n的对象引用是一样的吗?

解决方案 »

  1.   

    此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
    楼主【anhulife】截止到2008-07-11 10:12:08的历史汇总数据(不包括此帖):
    发帖的总数量:1                        发帖的总分数:0                        每贴平均分数:0                        
    回帖的总数量:2                        得分贴总数量:0                        回帖的得分率:0%                       
    结贴的总数量:0                        结贴的总分数:0                        
    无满意结贴数:0                        无满意结贴分:0                        
    未结的帖子数:1                        未结的总分数:0                        
    结贴的百分比:0.00  %               结分的百分比:---------------------
    无满意结贴率:---------------------无满意结分率:---------------------
    如何结贴请参考这里:http://topic.csdn.net/u/20080501/09/ef7ba1b3-6466-49f6-9d92-36fe6d471dd1.html
      

  2.   

    当然是相等的, LZ 
    Integer n=2; 
    Integer m=2; 
    是对n和m赋值 没涉及到引用对象。
    Integer n= new Integer(2); 
    Integer m= new Integer(2); 
    System.out.println(new String().valueOf(m==n)); 
    结果 false;
      

  3.   

    对了,刚才我解释错了,这个和字符串不同,2楼的分析也有问题。是这样的,对于整数类型来说,】Integer n=2; 
    Integer m=2; 
    这里是等的。这样的申明会促使进行boxing的操作,就是说会自动包装成对象,所以这里m和n所指向的都是一个包装了的对象。不过有一点特殊就是。如果这个大小在-128~127之间的话,他们都会使用同一个对象。如果超出这个范围,他们会自己构建各自的对象,然后就不等了。例如Integer n=128; 
    Integer m=128; 
    这里就不等!!!
      

  4.   


    迷惑了。。== 内存中的引用比较equals 内存中的值比较=赋值
    ~~~~~~~~
      

  5.   


    恩 UP~~开始没想到这个问题如果用equals比就没有这个区间的考虑了。。
    顶下5楼
      

  6.   

    5L,受教了
    这个是在看自动包装器和打包的时候发现的。
    看来Java基础里还有好多待研究的东西。
      

  7.   

    I test in my environment,It is work well. print false all the time