if(hj.getSalhj002() != memType){
    money += hj.getSalhj003(); //①
}else{
    memMoney += hj.getSalhj003(); //②  
}很简单的一个if else语句,hj.getSalhj002()和memType均为Long值,代码运行到这里两个Long值均为33,我在debug下看hj.getSalhj002() != memType的返回值为false,但是执行的却是①,这时为什么?应该是② 呀;将Long值后面加上.longvalue后,hj.getSalhj002() != memType的返回值为false,但是执行的是②。求解

解决方案 »

  1.   

    Long是个对象,两个对象比较的是地址,地址是不一样的。
    .longValue()后都变成了long基本类型,这时比较的才是数值大小
      

  2.   

    1L已经说了,Long是对象,==比较有问题(比较两个Long对象的内存地址),.longValue()后变成了long后数值可以正确比较,转成long以后,hj.getSalhj002() != memType 这里因为数值相等,所以返回是false,所以执行②,没转成long前,hj.getSalhj002() != memType 应该返回true,所以才会执行①
      

  3.   

    我疑惑的是if(false){①},编译器条件返回的false,执行的确实①,我执行了几遍,应该没有看错的呀
      

  4.   

    ++攀登者IT技术交流贰群:168051867(500人);攀登者IT【Java】精英 216931633 ;欢迎你的加入进行技术探讨!
      

  5.   

    Long是个对象,两个对象比较的是地址,地址是不一样的。
    .longValue()后都变成了long基本类型,这时比较的才是数值大小
      

  6.   

    ,Long是对象,==比较有问题(比较两个Long对象的内存地址)
      

  7.   

    要记住==用在基本数据类型的比较,特别注意的是对象的话要用equals进行比较切记切记