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.同时这条线
int x = 2147483648;生成编译错误
The literal 2147483648 of type int is out of range是JLS错了吗?
发布于 2013-05-04 10:15:02
int类型的最大十进制数是2147483648 (231)。
All decimal literals from 0 to 2147483647 may appear anywhere an int literal may appear. 如果int类型的十进制文字大于2147483648,或者如果十进制文字2147483648不是作为一元减号运算符(§15.15.4).的操作数出现,则会出现编译时错误
发布于 2013-05-04 10:18:45
这是一个措辞糟糕的IMHO。它试图在这个表达中告诉我们的是:
-2147483648减号不是整数文字的一部分,相反,减号是一元减号运算符,2147483648是int文字,整数文字2147483648只能出现在此精确表达式中。
发布于 2013-05-04 10:22:53
是JLS错了吗?
不,JLS是特定的-区分一个int变量和一个"int文字“,即int类型的十进制文字。
int变量的范围是-2,147,483,648..2,147,483,647 (即-(2^31)..2^31-1)
编译器将在Java代码中解析并在int上下文中使用的最大十进制数是2,147,483,648,但它只能用作一元'-‘运算符的操作数,也就是说,您只能以一种方式使用它-构造一个整数可以容纳的最负的十进制值:-22147483648。
在您提到的JLS的section 3.10.1 Integer Literals部分中,它说:
类型的最大十进制数是2147483648 (2^31)。
is也在几行之后说:
如果int类型的十进制文字大于2147483648 (2^31),或者如果十进制文字2147483648不是作为一元减号运算符的操作数出现,则它是编译时错误。
https://stackoverflow.com/questions/16369889
复制相似问题