在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个回答

265
注意将值转换为 long 和转换为 Long 之间存在差异。如果你将其转换为 long(原始值),那么它应该会自动封装为 Long(包装它的引用类型)。
您还可以使用 new 创建一个 Long 实例,使用 int 值进行初始化。

39
为了证明Earwicker所说的,您可以调用Long.valueOf(i)方法,它接受一个long类型的参数,但会将int类型扩展为long类型,并返回一个Long对象。 - Grundlefleck
2
自动装箱是更可取的,因为它不一定每次都要创建一个新的 Long 对象。 - Michael Myers
2
如果传递给 Long.valueOf() 的值在 0 到 128 之间,这是非常常见的情况,并且它返回一个缓存实例,那么这是否比自动装箱更可取?(如果您认为值得的话,我可以提出一个新问题...) - Grundlefleck
4
自动装箱做的事情与此相同。顺便说一下,它的范围在-127到128之间。 - Daniel Earwicker
6
自动装箱使用Long.valueOf()(如果我没记错的话),因此根本没有区别。我的评论是回答问题而不是回复你的评论。 - Michael Myers
显示剩余3条评论

228

5
请注意,如果您收到一个空的Integer对象,这将会生成一个NullPointerException。 - will824
2
我认为可能是因为我找不到方法Long.valueOf(int)!!,所以我的答案可能已经过时了。 - shareef
10
一个原始类型的 'int' 变量不能为null。 - Rondo
1
@1blustone 无论如何,这是一个红鲱鱼:如果接收到一个整数,则不会通过此调用生成nullpointer,而是通过尝试将数字转换为所需的原始类型:long(Long.valueOf(int)不存在) - Rondo
6
Java 中没有这样的方法,你把它和 Long.valueOf(long) 搞混了。 - Farid
显示剩余2条评论

26

如果你已经将int类型存储为Integer类型,你可以这样做:

Integer y = 1;
long x = y.longValue();

20

使用

new Long(your_integer);
或者
Long.valueOf(your_integer);

11
 1,new Long(intValue);
 2,Long.valueOf(intValue);

对于现在正在尝试的任何人来说,Long.valueOf(intValue)是正确的方法,构造函数方法已经过时。 - Nish

8

如何处理

int myInt = 88;

// 无法编译

Long myLong = myInt;

// 编译并保留 int 类型的非空精神。最好的 转换 就是没有转换。当然,你的用例可能需要 Long 和可能的 NULL 值。但如果 int 或其他 longs 是您唯一的输入,并且您的方法可以修改,我建议采用这种方法。

long myLong = myInt;

// 编译,是最有效的方式,并且清楚地表明源值是且永远不会为NULL。

Long myLong = (long) myInt;

7

在Java中,您可以执行以下操作:

 int myInt=4;
 Long myLong= new Long(myInt);

在您的情况下,应该是这样的:
content.setSequence(new Long(i));

6

我有一个小玩具,它可以处理非通用接口。 如果输入错误,我不介意它抛出ClassCastException异常(没问题并且很高兴)。

public class TypeUtil {
    public static long castToLong(Object o) {
        Number n = (Number) o;
        return n.longValue();
    }
}

3
我们可以使用Number引用来获取长整型数值。
public static long toLong(Number number){
    return number.longValue();
}

它适用于所有数字类型,这里是一个测试:

public static void testToLong() throws Exception {
    assertEquals(0l, toLong(0));   // an int
    assertEquals(0l, toLong((short)0)); // a short
    assertEquals(0l, toLong(0l)); // a long
    assertEquals(0l, toLong((long) 0)); // another long
    assertEquals(0l, toLong(0.0f));  // a float
    assertEquals(0l, toLong(0.0));  // a double

}

2
 //Suppose you have int and you wan to convert it to Long
 int i=78;
 //convert to Long
 Long l=Long.valueOf(i)

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