JLS 3.10.1. Integer Literals http://docs.oracle.com/javase/specs/jls/se7/html/jls-3.html#jls-3.10.1陈述
The largest decimal literal of type int is 2147483648.
Run Code Online (Sandbox Code Playgroud)
同时这一行
int x = 2147483648;
Run Code Online (Sandbox Code Playgroud)
产生编译错误
The literal 2147483648 of type int is out of range
Run Code Online (Sandbox Code Playgroud)
JLS错了吗?
这是措辞不好的恕我直言.它试图在这个表达式中说我们:
-2147483648
Run Code Online (Sandbox Code Playgroud)
减号不是整数文字的一部分,而减号是一元减号运算符并且2147483648是int文字,整数文字2147483648只能出现在这个精确的表达式中.
JLS错了吗?
不,JLS是特定的 - 区分int变量和"int literal",即int类型的十进制文字.
int变量的范围是-2,147,483,648..2,147,483,647(即 - (2 ^ 31).. 2 ^ 31-1)
编译器将在Java代码中解析并在上下文中使用的最大十进制字面int值为2,147,483,648,但它只能用作一元' - '运算符的操作数,也就是说,您只能以一种方式使用它- 构造一个int可以容纳的最负的十进制值:-22147483648.
在你提到的JLS的那一节,3.10.1整数文字中,它说:
int类型的最大十进制文字是2147483648(2 ^ 31).
后面还说了几行:
如果int类型的十进制文字大于2147483648(2 ^ 31),或者十进制文字2147483648出现在除一元减号运算符的操作数之外的任何地方,则为编译时错误.
| 归档时间: |
|
| 查看次数: |
230 次 |
| 最近记录: |