首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >数值提升是否使用缩小转换?

问数值提升是否使用缩小转换?
EN

Stack Overflow用户
提问于 2020-08-17 07:04:00
回答 1查看 67关注 0票数 1

我一直认为数字转换使用的是扩大转换,并且非常简单,只需遵循一些优先级,比如:

如果操作数为double类型,则所有操作数都转换为double。下一个优先级是浮动,然后是长的,然后是int。

但是我偶然发现了一个新的JLS,上面写着

如果任何表达式为int类型,且不是常量表达式(§15.29),则推广的类型为int,而其他非int类型的表达式将经历扩展的原语到int的转换。 否则,如果任何表达式都是短类型,而其他表达式要么是类型短,要么是字节类型,或者是具有在类型短中可表示的值的int类型的常量表达式,则提升的类型是短的,字节表达式将经历将基元转换为短的扩展,而int表达式将经历由收缩原语转换为短的转换。 否则,如果任何表达式都是字节类型的,而其他表达式要么是类型字节,要么是具有在类型字节中可表示的值的int类型的常量表达式,则提升的类型是字节,而int表达式将经历收缩原语到字节的转换。 否则,如果任何表达式为char类型,而每个其他表达式都为char类型或具有在类型char中可表示的值的int类型的常量表达式,则提升的类型为char,且int表达式将经历收缩原语到char的转换。 否则,提升的类型是int,并且所有不属于int类型的表达式都将经历扩展的原语到int的转换。

你能告诉我这是什么意思吗?数值提升什么时候使用缩小转换?我很抱歉,如果这是一个毒品问题,但我是一个非英语的人,这是太英语了,我无法理解。

EN

回答 1

Stack Overflow用户

发布于 2020-08-17 07:21:43

如果两个值有不同的数据类型,Java将自动将其中一个值提升到两种数据类型中较大的值。

如果其中一个值是整数的,另一个值是浮点值,Java将自动将积分值提升到浮点值的数据类型。

较小的数据类型,即字节、短数据和char,在与Java二进制算术运算符一起使用时,首先被提升为int,即使操作数都不是int。

在所有提升发生并且操作数具有相同的数据类型之后,结果值将具有与其提升操作数相同的数据类型。

收缩转换只会影响到int类型的数值表达式,这些表达式在更窄的类型中既是常量,也是可表示的。

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

https://stackoverflow.com/questions/63446084

复制
相关文章

相似问题

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