首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >数值提升是否适用于Java中的常量?

问数值提升是否适用于Java中的常量?
EN

Stack Overflow用户
提问于 2018-05-02 10:30:42
回答 1查看 64关注 0票数 6

第5.1.2节和第5.6.2条没有提到数值提升和扩展常量是如何工作的。

如下所示,出现了预期的错误:

代码语言:javascript
复制
short a = 2;
short b = 3;
short s = a + b; // error: incompatible types: possible lossy conversion from int to short

但是,如果它们被声明为“最终”,则不会出错地进行编译:

代码语言:javascript
复制
final short a = 2;
final short b = 3;
short s = a + b; // no error

为什么会这样呢?规格的哪个部分解释了这一点?

我的猜测是,它们是编译时间常数,因此被视为整数。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-05-02 10:37:35

升级必须由编译器完成,因为S。

但是,编译器能够将产生的整数和缩小到短,因为:

如果表达式是字节、短、字符或int类型的常量表达式(§15.28) .如果变量的类型是字节、短或字符,并且常量表达式的值可以在变量的类型中表示,则可以使用收缩基元转换。

正如所描述的在JLS中。

添加final决定它是否是一个常量表达式。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50132448

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档