java Long包装类比较

System.out.println(new Long(10).equals(10L));   
System.out.println(new Long(1000).equals(1000));
返回 true,false
我比较2个Long包装类型的值,调用equals方法在数字后面加上L才能相等这是为啥呢,Long类的equals方法是这样写的
public boolean equals(Object paramObject)
  {
    if ((paramObject instanceof Long)) {
      return this.value == ((Long)paramObject).longValue();
    }
    return false;
  }
  
阅读 4.8k
3 个回答

if(paramObject instanceof Long)一个非Long型参数在这里就是false了

10L的L就是包装类的Long。

踩我的同学。可否告诉我错在哪里了?你这样踩了一脚而不说原因,我下次还是会犯同样的错误,那么对社区的建设也没什么作用。另外,我保证不像某些人一样进行恶意报复,你看可好?

因为数字常量不增加L标识编译器会认为它是一个int类型。
可通过如下命令查看一下编译后的class文件。

javap -v XXX.class

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题