JLS 8, chapt 15.21指定了两个名为floating point equality test
和integer equality test
的概念,如下所示:
如果操作数的提升类型是int或long,那么是整数 进行相等测试。
如果提升的类型是float或double,那么浮点数 进行相等测试。
浮点数的定义如下:
浮点相等测试按照以下方式执行 IEEE 754标准的规则:
因此,我们可以参考IEEE 754来描述浮点相等的行为。但是int
怎么办? JLS指定它如何执行整数相等测试?
答案 0 :(得分:2)
自Java中的int
and all other integral types are signed two's complement以来,您不必担心有两种不同的方式来表示0。
由于您正在寻找参考,the JLS §4.2.提供了一个参考:
如果移位运算符以外的整数运算符至少有一个 long类型的操作数,然后使用64位执行操作 精度,数值运算符的结果类型为long。 如果另一个操作数不长,则首先将其扩展(第5.1.5节)以进行输入 长期通过数字推广(§5.6)。
否则,操作使用32位精度执行,并且 数值运算符的结果是int类型。如果是任一操作数 不是int,它首先通过数字提升扩展为int类型。