两个 Long 类型为什么不能直接用==比较

Posted SonoFelice——棣琦

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了两个 Long 类型为什么不能直接用==比较相关的知识,希望对你有一定的参考价值。

这要说到==和 equals 的区别了。

1. ==比较的是两个对象在内存中的地址值(栈中的内容)。

2.equals 是 java.lang.Object 类的一个方法。equals 比较的是两个对象的内容(堆中的内容)。java 中所有的类都默认继承于 Object,所以所有的类都有这个方法。

但是 Long 是一个对象,是对 long 的封装。我们看一下 Long 对象的源码,里面的 equals 方法是这么写的:

1     public boolean equals(Object obj) {
2         if (obj instanceof Long) {
3             return value == ((Long)obj).longValue();
4         }
5         return false;
6     }

所以两个 Long 类型的变量进行比较的话,要么用 equals,要么先调用longValue 方法,拿到里面的 long 值之后再进行==比较。

 

以上是关于两个 Long 类型为什么不能直接用==比较的主要内容,如果未能解决你的问题,请参考以下文章

两个 Long 类型为什么不能直接用==比较

数据类型比较:Long和BigDecimal

JAVA Long类型可以直接用==比较吗?

Java中switch为什么不能用long类型

Java中switch为什么不能用long类型

Java中判断两个Long类型是否相等