逍遥游

java 常量超过int整型范围

错误信息

the literal 1437546025594 of type int is out of range;

问题描述

给另一个传参数时,ide出现了上述错误,意思很容易懂,就是说值超过了int类型的范围,以为是写错了参数类型,但是检查了好几遍,确定我始终用的是long。无奈之下,上网搜索,发现了原因。记录下来,便于以后查阅。

解决方案

将“1437546025594”写成“1437546025594l” (末尾加上小写的“l”)

原因分析(纯属臆断)

java是强类型语言,所有变量、常量都必须有明确的类型,在编译的时候为了避免二义性和处理简单起见,默认所有的数字类型常量类型都是int,而int(32位)的范围是-2147483648~2147483647,显然1437546025594超过了范围,所以报错。
如果常量的大小大于int范围,就需要加上标志(后缀“l”)告诉编译器这是long类型的常量。与此类似的还有:八进制0???,十六进制0x???、浮点数后缀“f”。

附录

附上一段资料,某度知道上摘来的,不保证正确性。
“JVM资料:The JVM operand stack and local variables are defined to hold 32-bit values. So 64-bit long values that are stored on the operand stack or in local variables must be represented as two 32-bit entries.”

“中文:是JVM 操作数栈及本地变量都定义成32位的值,所以存储在操作数栈或本地变量里的64位的long数值都必须被表示为两个32位的实体。”


多说停止服务,disqus引导注册太过分,暂时不上评论系统了。有机会自己造轮子吧。邮箱:input@newnius.com