栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

为什么int i = 1024 * 1024 * 1024 * 1024编译时没有错误?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

为什么int i = 1024 * 1024 * 1024 * 1024编译时没有错误?

那句话没有错。您只是将4个数字相乘并将其分配给一个int,恰好发生溢出。这与分配单个 文字 不同,后者在编译时会进行边界检查。

导致错误而不是 赋值的 是超出范围的 文字 : __

System.out.println(2147483648);        // errorSystem.out.println(2147483647 + 1);    // no error

相反,

long
文字可以编译良好:

System.out.println(2147483648L);       // no error

请注意,实际上,结果仍然 在编译时计算的,因为它

1024 * 1024 * 1024 * 1024
是一个
常量表达式


int i = 1024 * 1024 * 1024 * 1024;

变成:

   0: iconst_0         1: istore_1

请注意,结果(

0
)只是简单地加载和存储,并且不会发生乘法。


从JLS§3.10.1起(感谢@ChrisK在评论中提出):

如果type的十进制文字

int
大于
2147483648
(2
31),或者十进制文字
2147483648
出现在非一元减运算符的操作数之外的任何地方(第15.15.4节),则这是编译时错误。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/451407.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号