Java新长(0)

Arn*_*bal 6 java

在我的课上我有这个参数:

public Long label_id ;
Run Code Online (Sandbox Code Playgroud)

当我尝试评估label_id中的值为0时

if(item.label_id == new Long(0)) {
    Doesn't enter here
} else {
    Enters here
}
Run Code Online (Sandbox Code Playgroud)

它应该进入条件,因为它们都为零,但它进入了else条件.我甚至试过调试代码:

label_id    Long  (id=142)  
    value 0
Run Code Online (Sandbox Code Playgroud)

我在这里错过了什么吗?

Roc*_*ket 6

您正在使用对象比较.和新...你生成一个新的对象.两个对象都不一样......你可以使用新的Long(0).equals(...)


Par*_*alo 6

您应该首先提取值,label_id然后比较它:

if(item.label_id.longValue() == 0L)
Run Code Online (Sandbox Code Playgroud)


Gam*_*erb 6

我将改进@Rocket 和@ParkerHalo 的答案,以解释为什么new Long(0)不起作用。

因此, if 代码行的问题在于new Long(0)创建了 class 的对象Long,但是您不是在比较类,而是希望比较的是原始类型。基本类型没有方法,基本上是一组专门用于存储数字的内存(阅读注释)。它们是用 C 创建的,并且大多数(如果不是全部)都进入了 Java。然而,Long在某些情况下,该类有多种方法可以更轻松地处理长整型。

您不能以这种方式比较它们,因为new Long(0)返回的是对类的引用,而不是原始类型。

启动并运行代码的最快方法是按照 @ParkerHalo 的建议进行操作,并将返回到原始 long 的值与零值进行比较。因此,如果您想查看它是否为零,您可以使用:

if(item.label_id.longValue() == 0L) {

您可以将 替换0为其他值,只要将 保留L为 long 即可。

希望这可以帮助!