Обновление: Этот ответ неверный! Я оставил это, потому что я думаю, что комментарии полезны, чтобы видеть, почему это неправильно.
Это не пример нарушения договора equals
/ hashCode
. Вам нужно проверить, равен ли d1.equals(d2)
, чтобы доказать это. И действительно, d1.equals(d2)
возвращает ложь. Почему?
Это потому, что «2» - это не то же самое, что «2,00»; значение справа имеет более значимые цифры. Другими словами, они равны значению (2 == 2,00), но отличаются по шкале (0! = 2).
Если вы прочтете исходный код здесь , вы увидите, что для двух чисел он падает до реализации Java BigDecimal
equals
. Затем, читая документацию Java , вы узнаете, как это работает более подробно.