Long.valueOf不编译将int转换为long

时间:2012-12-03 14:10:07

标签: java int long-integer

查看这个问题的答案(链接: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

2 个答案:

答案 0 :(得分:3)

如果intervalint,那么只需...

    if ((newUpdate - lastUpdate) > interval) { ...

在此上下文中,没有充分的理由明确地将interval转换为long。无论如何,转换将为您完成。

表达式Long.valueOf(Interval)返回java.lang.Long而不是long。如果您需要明确将interval变为long,那么您应该将其投射:

    if ((newUpdate - lastUpdate) > ((long) interval)) {

唯一令我困惑的是你的例子是在比较longLong时出现编译错误的原因。 Long 应自动取消装箱,并且应使用long运营商的long>版本:参考JLS - 15.20.1这表示数字关系运算符在需要时执行拆箱。唯一的解释是您使用1.4或更早的源级别进行编译。

答案 1 :(得分:0)

Long.valueOf(Interval)返回包装器对象Long,因此>运算符不适用。

如果Interval是字符串类型,则在比较中使用Long.valueOf(Interval).longValue()

如果Intervalint类型,则只需在比较中使用Interval。它会自动提升为long - > specs