泰山版《Java开发手册》答开发者问
泰山版《Java开发手册》—第8页—第四章节OOP规约—第9点:关于浮点数之间等值判断的强制规约,我个人觉着不合理,或者是描述不够准确。以下为个人理解,如有错误,敬请指出,感谢!
基本类型不能用==,包装类型不能用equals,这应该限于特定场景,即做等值判断的两个对象是经过计算得来的,该场景下的等值判断会由于浮点数计算不精确,而导致判断结果与预期不符,其背后原因是计算机的二进制无法精确表示浮点数。
如果做等值判断的两个对象不是经过计算得来,那么并不会因为计算损失精度而导致判断失败,这种情况下用==和equals判断未尝不行,毕竟包装类还重写了equals方法,floatToIntBits和doubleToLongBits分别将Float和Double转成int和long,然后用==来判断。
赞0
踩0