在我的课上我有这个参数:
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)
我在这里错过了什么吗?
您应该首先提取值,label_id然后比较它:
if(item.label_id.longValue() == 0L)
Run Code Online (Sandbox Code Playgroud)
我将改进@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 即可。
希望这可以帮助!
| 归档时间: |
|
| 查看次数: |
17767 次 |
| 最近记录: |