Java:Long result = -1:无法从int转换为long

时间:2010-12-14 08:50:26

标签: java casting

我正在使用eclipse java ee来执行java编程。

我的一个函数中有以下代码行:

Long result = -1;

我收到以下错误:

  

类型不匹配:无法从int转换为Long

我不太明白为什么当我向变量添加数字时它会提供此错误。

如何解决这个问题以及为什么会首先解决这个问题?

7 个答案:

答案 0 :(得分:15)

对象Longint之间没有转化,因此您需要从long进行转换。添加L会将整数-1变为long-1L):

Long result = -1L;

但是,intlong进行了转化,因此可行:

long result = -1;

因此你可以像这样写:

Long result = (long) -1;

从原语(intlong等)转换为包装对象(IntegerLong等)称为自动装箱,阅读更多here

答案 1 :(得分:4)

-1可以自动装入整数。

因此:

Integer result = -1;

有效,相当于:

Integer result = Integer.valueOf(-1);

但是,无法将Integer分配给Long,因此问题中的整体转换失败。

Long result = Integer.valueOf(-1);

也不起作用。

如果你这样做:

Long result = -1L;

它等同于(再次因为自动装箱)到:

Long result = Long.valueOf(-1L);

请注意,L会使其成为long字面值。

答案 2 :(得分:2)

首先,检查Java版本:从命令行运行“java -version”。

在1.5之前的Java版本中,正确的语法是:

长期结果=新的长期(1L);

在java> 1.5中,它自动完成。它被称为“自动装箱”。

大写字母“L”告诉Java该数字应解释为long。

答案 3 :(得分:1)

Long result = -1L;

答案 4 :(得分:1)

 Long result = -1L;

 Long result = (long) -1;

 Long result
     = Long.valueOf(-1);  // this is what auto-boxing does under the hood

首先发生的是文字-1int。从Java5开始,当您在Integer上使用它时,可以将其自动装入Object,但不会将其变为Long(仅long是的)。

请注意,在需要时,int会自动扩展为long:

long result = -1;   // this is okay

相反的方式需要一个明确的演员:

int number = (int) result;

答案 5 :(得分:1)

-1是原始int值,Long但是包装类java.lang.Long。无法将原始整数值分配给Long对象。有两种方法可以解决这个问题。

  1. 将类型更改为long

    如果将类型从包装类Long更改为基元类型long,则java会自动将整数值转换为长整数值。

      

    long result = -1;

  2. 将int值更改为long

    如果将整数值从-1更改为-1L以显式更改为长文字,则可以使用此原始值自动将此值包装到java.lang.Long对象。< / p>

      

    Long result = -1L;

答案 6 :(得分:0)

要指定long类型的常量,请将其后缀为L

Long result = -1L;

如果没有L,解释程序会将常数编号为int,这与long的类型不同。