在Java中使用short,int,long,double,float进行转换

Yon*_*Nir 0 java double int types casting

据我所知,当您使用Java中的算术运算在两个这些类型之间进行转换时,例如double + int,结果将是更大的类型(在本示例中,结果将是double).在对相同大小的2种类型进行算术运算时会发生什么?int + float和long + double会给出什么?因为int和float每个都是4个字节,而long和double是8个字节.

Oli*_*rth 10

这全部由JLS中的二进制数字促销规则指定.来自http://docs.oracle.com/javase/specs/jls/se7/html/jls-5.html#jls-5.6.2:

当运算符将二进制数字提升应用于一对操作数时,每个操作数必须表示可转换为数字类型的值,以下规则适用,顺序如下:

  1. 如果任何操作数是引用类型,则进行拆箱转换(第5.1.8节).

  2. 应用扩展基元转换(第5.1.2节)来转换由以下规则指定的一个或两个操作数:

    • 如果任一操作数的类型为double,则另一个操作数转换为double.

    • 否则,如果任一操作数的类型为float,则另一个操作数转换为float.

    • 否则,如果任一操作数的类型为long,则另一个操作数转换为long.

    • 否则,两个操作数都将转换为int类型.

在类型转换之后,如果有的话,将值集转换(第5.1.13节)应用于每个操作数.

对某些运算符的操作数执行二进制数字提升:

  • 乘法运算符*,/和%(§15.17)

  • 数值类型的加法和减法运算符+和 - (§15.18.2)

  • 数值比较运算符<,<=,>和> =(§15.20.1)

  • 数字相等运算符==和!=(§15.21.1)

  • 整数位运算符&,^和| (§15.22.1)

  • 在某些情况下,条件运算符?:(§15.25)

("值集转换"是关于浮点表示之间的映射.)