Java新长(0)

时间:2015-11-12 14:05:55

标签: java

在我班上我有这个参数:

public Long label_id ;

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

if(item.label_id == new Long(0)) {
    Doesn't enter here
} else {
    Enters here
}

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

label_id    Long  (id=142)  
    value 0

我在这里错过了什么吗?

5 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分:5)

您应首先提取label_id的值,然后进行比较:

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

答案 2 :(得分:2)

我将改进@Rocket和@ParkerHalo的答案来解释为什么new Long(0)无效。

所以if行代码的问题是new Long(0)创建了一个类Long的对象,但是你不能比较类,希望你比较的是{{3} }。原始类型没有方法,基本上是一组专用于存储数字的内存(阅读注释)。它们是用C创建的,大多数(如果不是全部)都是用Java编写的。但是,Long类有多种方法可以在某些情况下更轻松地使用long。

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

启动和运行代码的最快方法是按照@ParkerHalo的建议进行操作,并将返回的值返回到基数为long的零值。因此,如果你想看看它是否为零,你会使用:

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

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

希望这有帮助!

答案 3 :(得分:1)

Java中的==运算符检查对象是否相等。使用new Long(0),您可以显式创建一个永远不会与任何其他Long具有相同标识的新对象。

使用equals方法,但要注意NullPointerExceptions`。

if(item.label_id.equals(new Long(0))) {

} else {

}

您也可以尝试依赖缓存,但我不会这样做

if(item.label_id == Long.valueOf(0)) {

} else {

}

答案 4 :(得分:-2)

使用

item.label_id.longValue() == new Long(0).longValue()

item.label_id.equals(new Long(0))

否则你比较内存地址/指针