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


219

我一直在这里找到问题,并且Google的人们遇到了麻烦longint而不是相反。但我敢肯定,我不是以前已经从去碰到这种情况的唯一一个intLong

我找到的唯一其他答案是“首先将它设置为Long”,这实际上并没有解决这个问题。

我最初尝试投射,但得到了“ Cannot cast from int to Long

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

如您所料,我有点困惑,我被困住了,int因为有些内容以形式出现ArrayList,而我要存储其信息的实体要求序列号为Long。


for(long i = 0; i <myList.size(); ++ i)也适用
Instantsoup,2009年

@Instantsoup是的,它将适用于循环,但是正如我在问题底部所指定的那样,正在使用的ArrayList在指定要获取的索引位置时需要原始int
Ghosty

long longValue = intValue | 0升;
丹尼尔·吉帕

我所做的是:先投射intlong,然后分配longLong。例如int x = 2; Long y = (long)x;
Eric Wang

Answers:


244

请注意,强制转换为long和强制转换为Long。如果强制转换为long(原始值),则应将其自动装箱为Long(包装它的引用类型)。

您也可以new用来创建的实例Long,并使用int值对其进行初始化。


31
为了演示Earwicker所说的内容,您可以调用Long.valueOf(i),它需要很长的时间,但会扩展一个int值,并给您一个Long对象。
Grundlefleck

1
自动装箱是可取的,因为不必Long每次都创建一个新对象。
迈克尔·迈尔斯

2
(警告:此注释的其余部分是猜测和推测)如果给Long.valueOf()的值介于0和128之间(这是非常常见的),并且它返回一个缓存的实例,那么比自动装箱更好吗?(我可能会问一个新的问题,如果您认为这是值得的...)
Grundlefleck

4
自动装箱与此相同。顺便说一句,这是-127和128之间
丹尼尔·埃里克

6
@Grundlefleck:自动装箱使用Long.valueOf()(如果我没记错的话),所以完全没有区别。我的评论是对答案的答复,而不是您的评论。
迈克尔·迈尔斯

193

使用以下内容:Long.valueOf(int);


5
注意,因为如果您收到一个为null的Integer对象,这将生成NullPointerException。
will824 2011年

2
如果我想知道答案是否正确,是正确的,因为我找不到方法Long.valueOf(int) !!
shareef14年

5
@ will824-基本的“ int”变量不能为null。
Rondo

1
@shareef-参见serg的评论-但我认为此方法将int强制转换为long类型,而自动装箱时使用Long类型...因此似乎是多余的
Rondo

1
@Rondo一个Integer罐头,这就是他说的。
Moira

17

如果您已经将int输入为Integer,则可以执行以下操作:

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


6

我有这个小玩具,它也处理非通用接口。如果馈送错误(好的,很高兴),我会抛出ClassCastException

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

6

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

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

在您的情况下,它将是:

content.setSequence(new Long(i));

6

怎么样

int myInt = 88;

//不会编译

Long myLong = myInt;

//编译并保留int的非NULL精神。最好的演员根本没有演员。当然,您的用例可能需要Long和可能的NULL值。但是如果int或其他long是您唯一的输入,并且您的方法可以修改,我建议您使用这种方法。

long myLong = myInt;

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

Long myLong = (long) myInt;

3

我们将通过使用Number引用来获取long值。

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

我对此有很多麻烦。我只是想:

thisBill.IntervalCount = jPaidCountSpinner.getValue();

其中IntervalCount为Long,而JSpinner设置为返回Long。最终,我不得不编写以下函数:

    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()返回的对象实际上是a Long,则绝对只需要(Long)在前面放一个强制类型转换。也可以尝试把一个断点在您检查int.classlong.class等是否曾经打?如果您有一个类似数字的对象,它将支持java.util.Number,因此将其强制转换为该对象并调用longValue方法。在这种情况下,无需通过字符串。因此,即使您还需要处理字符串,此函数也可以简化很多。(这是问题的一部分,是针对的错误参考文档JSpinner)。
Daniel Earwicker 2011年

1
我也最终做了这样的事情。我不确定会收到什么样的数字,是否愿意将其转换为Long而不关心效率,但希望避免重复使用。
Profiterole '18年


0

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

更清楚的方法是

Integer.valueOf(intValue).longValue()

longValue只是一个(long),因此您在这里唯一获得的是Integer内部缓存。
MartinSchröder19年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.