Integer $1=new Integer(23);
Integer $2=new Integer(23);
System.out.println(+$1==$2);
这里输出是true;为什么啊,+$1==$2前面的+是我的误输入,但是居然有输出:true;
如果是$1==$2的话,肯定是false,但这里多了个+号就变成false了,为虾米啊,望高手解答

解决方案 »

  1.   

    此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
    楼主【tianyiwangok】截止到2008-07-29 17:22:43的历史汇总数据(不包括此帖):
    发帖的总数量:8                        发帖的总分数:125                      每贴平均分数:15                       
    回帖的总数量:10                       得分贴总数量:1                        回帖的得分率:10%                      
    结贴的总数量:7                        结贴的总分数:105                      
    无满意结贴数:2                        无满意结贴分:90                       
    未结的帖子数:1                        未结的总分数:20                       
    结贴的百分比:87.50 %               结分的百分比:84.00 %                  
    无满意结贴率:28.57 %               无满意结分率:85.71 %                  
    楼主加油

    取消马甲机器人,请点这里:http://www.java2000.net/mycsdn/robotStop.jsp?usern=tianyiwangok
      

  2.   

    我估计是+让$1变成int的23了,如果int和Integer的对象进行比较的话是比较内容.这样就是true了.
      

  3.   

    的确是这样.
    测试public class Test{
        public static void main(String[] args) {
            Integer i1=new Integer(23);
            Integer i2=new Integer(23);
            System.out.println(i1==i2);
            System.out.println(+i1==i2);
        }
    }bytecode:Compiled from "Test.java"
    public class Test extends java.lang.Object{
    public Test();
      Code:
       0: aload_0
       1: invokespecial #1; //Method java/lang/Object."<init>":()V
       4: returnpublic static void main(java.lang.String[]);
      Code:
       0: new #2; //class java/lang/Integer
       3: dup
       4: bipush 23
       6: invokespecial #3; //Method java/lang/Integer."<init>":(I)V
       9: astore_1
       10: new #2; //class java/lang/Integer
       13: dup
       14: bipush 23
       16: invokespecial #3; //Method java/lang/Integer."<init>":(I)V
       19: astore_2
       20: getstatic #4; //Field java/lang/System.out:Ljava/io/PrintStream;
       23: aload_1
       24: aload_2
       25: if_acmpne 32
       28: iconst_1
       29: goto 33
       32: iconst_0
       33: invokevirtual #5; //Method java/io/PrintStream.println:(Z)V
       36: getstatic #4; //Field java/lang/System.out:Ljava/io/PrintStream;
       39: aload_1
       40: invokevirtual #6; //Method java/lang/Integer.intValue:()I
       43: aload_2
       44: invokevirtual #6; //Method java/lang/Integer.intValue:()I
       47: if_icmpne 54
       50: iconst_1
       51: goto 55
       54: iconst_0
       55: invokevirtual #5; //Method java/io/PrintStream.println:(Z)V
       58: return}
    我们看到第40行和44行有两个Integer.intValue,这就是去两个对象的int值.然后进行了int类型的比较.所以是true
      

  4.   

    jad分析结果:import java.io.PrintStream;public class Test
    {    public Test()
        {
        }    public static void main(String args[])
        {
            Integer integer = new Integer(23);
            Integer integer1 = new Integer(23);
            System.out.println(integer == integer1);
            System.out.println(integer.intValue() == integer1.intValue());
        }
    }