Java:Long result = -1:无法从int转换为long
我正在使用eclipse java ee来执行java编程。
我的一个函数中有以下代码行:
Long result = -1;
我收到以下错误:
类型不匹配:无法从int转换为Long
我不太明白为什么当我向变量添加数字时它会提供此错误。
如何解决这个问题,为什么一开始就会发生这个问题?
对象Long
和int
之间没有转换,因此您需要从long
。 添加L
使整数-1
变为long
( -1L
):
Long result = -1L;
但是有一个long
的转换,所以这有效:
long result = -1;
所以你可以像这样写:
Long result = (long) -1;
从基元( int
, long
等)转换为Wrapper对象( Integer
, Long
等)称为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对象。 有两种方法可以解决这个问题。
-
将类型更改为
long
如果将类型从包装类
Long
更改为基本类型,则long
java会自动将整数值转换为long值。long result = -1;
-
将int值更改为long
如果将整数值从
-1
更改为-1L
以将其显式更改为长文本,则可以使用此原始值自动将此值包装到java.lang.Long
对象中。Long result = -1L;
要指定long
类型的常量,请将其后缀为L
:
Long result = -1L;
如果没有L
,解释器会将常数作为int
键入,这与long
类型不同。