[英]Binary Numeric Promotion for Floats
在5.6.2中的JLS中。 二进制数值促销:
当运算符将二进制数字提升应用于一对操作数时,每个操作数必须表示一个可转换为数字类型的值,以下规则适用:
如果任何操作数是引用类型,则将其进行拆箱转换(第5.1.8节)。
扩展原语转换(第5.1.2节)适用于转换以下规则指定的一个或两个操作数:
如果一个操作数的类型为double,则另一个将转换为double。
否则, 如果其中一个操作数的类型为float,则另一个将转换为float。
否则,如果其中一个操作数的类型为long,则另一个将转换为long。
否则,两个操作数都将转换为int类型。
这让我感到困惑,因为http://www.mathcs.emory.edu/~cheung/Courses/170/Syllabus/04/mixed.html和https://alvinalexander.com/java/java-int-double-float-混合类型分算术规则
指出
在执行算术运算之前,算术运算(+,-,*,/)中的所有浮点值(浮点和双精度)都将转换为双精度类型。
根据我的理解,根据JLS,将1浮点数和1整数相加将导致浮点数。 但是,根据其他消息来源,将1 float和1 integer相加将导致double?
当消息来源提出违背JLS的主张时,很可能错了。 在这种情况下,以下内容演示了JLS描述的行为:
Number n = 1 + 0.1f;
System.out.println(n instanceof Float); // true
System.out.println(n instanceof Double); // false
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.