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