long l = 1;
Long l1 = 1L;
Long l2 = new Long(1);
if (l == l1) {
System.out.println("ok1");
}

if(l1 == l2){
System.out.println("ok2");
}
如上代码,"ok1"可以理解,都在栈里;"ok2"有点疑问,l2不是在堆里吗,怎么也相等了?请指教.

解决方案 »

  1.   


    不好意思,笔误
    long l = 1;
    Long l1 = 1L;
    Long l2 = new Long(1);
    if (l == l1) {
    System.out.println("ok1");
    }if(l == l2){
    System.out.println("ok2");
    }
      

  2.   


    long l = 1;
                Long l1 = 1L;
                Long l2 = new Long(1);
                if (l == l1) {
                System.out.println("ok1");
                }            if(l == l2){
                 System.out.println("ok2");
                }
                if(l1 == l2){
                System.out.println("ok3");
                }输出ok1
    ok2
      

  3.   

    重复下问题:
    if(l == l2){
    System.out.println("ok2");
    }
    如上代码,"ok1"可以理解,都在栈里;"ok2"有点疑问,l2不是在堆里……
      

  4.   


    因为l是一个基本类型,当l和l2这个对象在一起比较时,l2会自动解箱,即l会和l2所指向的值做比较