在写完这条消息后,我真的真的会比较少去想这件事了。
这里有一个可以想象出的可能规则,但我认为如果实施了它,其行为可能会非常令人惊讶。
"如果非整数的十进制字面量可以精确地表示为double,就将其表示为double,否则将其表示为精确的BigDecimal(对于任何有限的十进制数字序列总是可能的)。"
考虑所有这些字面量:0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0。在这11个字面量中,只有0.0, 0.5和1.0可以精确地表示为double,因此根据上述规则,这3个就是double,剩下的8个将被转换成BigDecimal。
类似地,对于所有到1.00的0.00, 0.01, 0.02等两位小数的101个字面量,只有5个可以精确表示为double:0.00, 0.25, 0.50, 0.75和1.00。根据上述规则,只有这5个字面量是double类型,其余的都是BigDecimal。