在我班上我有这个参数:
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
我在这里错过了什么吗?
答案 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))
否则你比较内存地址/指针