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

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

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

Long result = -1; 

我收到以下错误:

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

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

如何解决这个问题,为什么一开始就会发生这个问题?

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

 Long result = -1L; 

但是有一个long的转换,所以这有效:

 long result = -1; 

所以你可以像这样写:

 Long result = (long) -1; 

从基元( intlong等)转换为Wrapper对象( IntegerLong等)称为autoboxing, 在此处阅读更多内容。

-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文字。

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

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

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

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

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

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

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

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

 long result = -1; // this is okay 

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

 int number = (int) result; 
 Long result = -1L; 

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

  1. 将类型更改为long

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

    long result = -1;

  2. 将int值更改为long

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

    Long result = -1L;

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

 Long result = -1L; 

如果没有L ,解释器会将常数作为int键入,这与long类型不同。