查看这个问题的答案(链接:How do I convert from int to Long in Java?),我使用以下内容将长值(newUpdate,lastUpdate)与int值(Interval)进行比较
if ((newUpdate - lastUpdate) > Long.valueOf(interval))
我无法编译。比较两种不同类型的正确方法是什么?
更多信息:
[INFO] Trace org.apache.maven.BuildFailureException: Compilation failure [145,51] operator > cannot be applied to long,java.lang.Long
Interval的类型为int
。
答案 0 :(得分:3)
如果interval
是int
,那么只需...
if ((newUpdate - lastUpdate) > interval) { ...
在此上下文中,没有充分的理由明确地将interval
转换为long
。无论如何,转换将为您完成。
表达式Long.valueOf(Interval)
返回java.lang.Long
而不是long
。如果您需要明确将interval
变为long
,那么您应该将其投射:
if ((newUpdate - lastUpdate) > ((long) interval)) {
唯一令我困惑的是你的例子是在比较long
和Long
时出现编译错误的原因。 Long
应自动取消装箱,并且应使用long
运营商的long
,>
版本:参考JLS - 15.20.1这表示数字关系运算符在需要时执行拆箱。唯一的解释是您使用1.4或更早的源级别进行编译。
答案 1 :(得分:0)
Long.valueOf(Interval)
返回包装器对象Long
,因此>
运算符不适用。
如果Interval
是字符串类型,则在比较中使用Long.valueOf(Interval).longValue()
。
如果Interval
为int
类型,则只需在比较中使用Interval
。它会自动提升为long
- > specs。