Java:为什么"long"原始类型不接受简单的数字?

Mr *_*rte 6 java int casting primitive-types long-integer

我有一个接收long类型参数的方法,我试着称它为传递1:

contato.setId(1);
Run Code Online (Sandbox Code Playgroud)

我收到了这个:

The method setId(Long) in the type Contato is not applicable for the arguments (int).
Run Code Online (Sandbox Code Playgroud)

但是,这也不1是一个长期的数字?是不是在长范围内

PS:只是说,我用这段代码解决了这个问题:

Integer y = 1;
long x = y.longValue();
contato.setId(x);
Run Code Online (Sandbox Code Playgroud)

这只是一个狡猾的问题.

rmu*_*ler 7

你应该使用contato.setId(1L);(注意"L"后缀)

文字"1"表示原始int值,它被转换为java.lang.Integer包装类.


alf*_*sin 6

long是一个包含64位(不与对象相混淆数据类型Long!)与一个int(32位),所以你不能从使用简单的赋值intlong.请参阅:http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html

为了了解如何声明各种数据类型,您应该具体检查下表:

Datatype    Default Value
byte        0
short       0
int         0
long        0L
float       0.0f
double      0.0d
char        '\u0000'
Object      null
boolean     false
Run Code Online (Sandbox Code Playgroud)

因此,对于您的情况,long应该使用后跟a的数字声明L,例如:

long x = 100L;
Run Code Online (Sandbox Code Playgroud)

此外,做你正在做的自动装箱:

Integer y = 1;
long x = y.longValue();
Run Code Online (Sandbox Code Playgroud)

这不仅是不必要的 - 它也非常浪费.因此,例如,如果你将在一个循环(多次)中执行它,你的代码将在数量级上变慢!