Насколько я понимаю, число 1.55 не может быть точно представлено в двоичном виде в стандарте представления чисел с плавающей точкой IEEE-754. Если мы ввёдем 1.55, то в памяти на самом деле будет:
1.5500000000000000444089209850062616169452667236328125
jshell> System.out.println(new BigDecimal(1.55));
1.5500000000000000444089209850062616169452667236328125
Но почему, когда мы выводим на экран double, то оно выводится корректно?
jshell> System.out.println(1.55d);
1.55