数字促销是否使用缩小转换?

问题描述

我一直认为数值转换使用扩展转换,并且很简单,就像遵循以下优先级一样:

如果操作数的类型为double,则所有内容都将转换为double。下一个优先级是float,然后是long,然后是int。

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

如果任何表达式的类型为int而不是常量表达式 (§15.29),则提升的类型为int,以及其他表达式 不是int类型的对象会进行从原始类型到int的扩展。

否则,如果任何表达式的类型为short,则为其他类型 表达式的类型为short或byte或常量 类型为int的表达式,其值可以在类型中表示 short,则提升后的类型为short,字节表达式 经过原始的扩展到short,然后将int 表达式经过从原始变窄到简短的转换。

否则,如果任何表达式的类型为字节,则为其他类型 表达式是字节类型或int类型的常量表达式 在类型字节中可以表示的值,然后提升 类型是字节,并且int表达式经过缩小的原语 转换为字节。

否则,如果任何表达式的类型为char,则为其他类型 expression是char类型或int类型的常量表达式 使用char类型可以表示的值,然后提升 类型是char,并且int表达式接受变窄的原语 转换为字符。

否则,提升的类型为int,并且所有表达式 不是类型int的对象将原始类型扩展为int。

你能告诉我这是什么意思吗?数字促销何时使用缩小转换?很抱歉,如果这是一个涂料问题,但我不是英语使用者,而且英语太英语了,我无法理解。

解决方法

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

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

与Java二进制算术运算符一起使用时,较小的数据类型(即byte,short和char)首先被提升为int,即使两个操作数都不为int。

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

按照您发布的内容,缩小转换只会影响int类型的数字表达式,该数字表达式既是常量也可以在较窄的类型中表示。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...