在长变量声明中使用字母 L
在Java中,当将int字面值分配给long变量时,int字面值会自动扩展为long。但是,当表达一个大于Integer.MAX_VALUE(2147483647)或小于Integer.MIN_VALUE(-2147483648)的值时,需要使用显式的long字面值。以下是解决这个问题的方法:
1. 对于大于Integer.MAX_VALUE的值,使用long字面值:
long x1 = 2147483648L; // OK
2. 对于小于Integer.MIN_VALUE的值,也需要使用long字面值:
long x2 = -2147483649L; // OK
通过使用显式的long字面值,可以确保将大于Integer.MAX_VALUE或小于Integer.MIN_VALUE的值正确地分配给long变量。
问题的出现原因是变量被声明为long类型,但赋值时使用的字面值被解释为int类型,导致无法适应32位的int变量。解决方法是在字面值的末尾添加l或L,将其转化为long类型。
具体代码如下:
long l2 = 3244444444l; // or 3244444444L
更多信息可以在以下链接中找到:
- [Primitive Data Types](http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html),特别是其中的"Default Values"和"Literals"部分。
但是我已经声明为long了,为什么被解释为int呢?
这是因为变量是int类型的,字面值被解释为int类型,当赋值给long变量时,它会变成一个long值。请参考我回答中的链接以获取更多信息。