在Java中如何将int转换为Long?

256

我在这里和Google上都发现了很多人遇到从long转换为int的问题,而不是相反的情况。然而,我确信在从int转换为Long之前也遇到了这种情况。

我找到的唯一其他答案是“一开始就将其设置为Long”,这真的没有解决问题。

我最初尝试进行强制转换,但我收到了“无法从int转换为Long”的错误消息。

for (int i = 0; i < myArrayList.size(); ++i ) {
    content = new Content();
    content.setDescription(myArrayList.get(i));
    content.setSequence((Long) i);
    session.save(content);
}

我想你可以想象我感到有些困惑,因为我的问题在于需要将一些信息存储到要求序列号为长整型 Long 的实体中,但是由于有些内容以 ArrayList 的形式出现,所以我被限制只能使用 int


对于 (long i = 0; i < myList.size(); ++i) 这种写法也是可以的。 - Instantsoup
@Instantsoup 是的,那对于循环来说是可行的,但正如我在问题底部指定的那样,我正在使用的 ArrayList 在指定要获取的索引位置时需要原始 int。 - Ghosty
1
long longValue = intValue | 0L; 长 longValue = intValue | 0L; - Daniel Jipa
2
我所做的是:首先将 int 强制转换为 long,然后将 long 赋值给 Long。例如:int x = 2; Long y = (long)x; - Eric
14个回答

2

我在这方面遇到了很多麻烦。我只想:

thisBill.IntervalCount = jPaidCountSpinner.getValue();

IntervalCount是一个长整型,而JSpinner被设置为返回一个长整型。最终我不得不编写如下函数:

    public static final Long getLong(Object obj) throws IllegalArgumentException {
    Long rv;

    if((obj.getClass() == Integer.class) || (obj.getClass() == Long.class) || (obj.getClass() == Double.class)) {
        rv = Long.parseLong(obj.toString());
    }
    else if((obj.getClass() == int.class) || (obj.getClass() == long.class) || (obj.getClass() == double.class)) {
        rv = (Long) obj;
    }
    else if(obj.getClass() == String.class) {
        rv = Long.parseLong(obj.toString());
    }
    else {
        throw new IllegalArgumentException("getLong: type " + obj.getClass() + " = \"" + obj.toString() + "\" unaccounted for");
    }

    return rv;
}

这似乎是解决问题的方法。对我来说,简单的转换和上述任何解决方案都没有奏效。非常令人沮丧。


1
如果jPaidCountSpinner.getValue()返回的是一个Long对象,那么你肯定只需要在前面加上(Long)转换。同时,尝试在检查int.classlong.class等时设置断点。它是否会被触发?如果你有一个类似数字的对象,它将支持java.util.Number,所以将其转换为该类型并调用longValue方法即可。在这种情况下,无需通过字符串进行转换。因此,即使你还需要处理字符串,这个函数也可以简化很多。(这里的问题之一是JSpinner的错误参考文档。) - Daniel Earwicker
1
我也最终做了类似的事情。我不确定我会收到什么类型的数字,并愿意将其转换为Long,对效率不太关心,但希望避免样板文件。 - Profiterole

1
除了其他建议,也可以尝试以下代码。
(long)intValue

原始类型到原始类型。

1
建议来自Android Studio的lint检查:删除不必要的装箱:因此,拆箱是:
public  static  long  integerToLong (int minute ){
    int delay = minute*1000;
    long diff = (long) delay;
    return  diff ; 
}

0

一旦只有方法Long.valueOf(long),在使用Long.valueOf(intValue)的情况下,从intlong的转换将隐式完成。

更清晰的方法是

Integer.valueOf(intValue).longValue()

longValue只是一个(long),所以你在这里唯一“获得”的就是Integer的内部缓存。 - Martin Schröder
是的。那就只写成 (long) intValue 呢? - syd

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接