Qual è la differenza tra queste due chiamate? (C'è qualche?)
// 1.
new BigDecimal("3.53456").round(new MathContext(4, RoundingMode.HALF_UP));
// 2.
new BigDecimal("3.53456").setScale(4, RoundingMode.HALF_UP);
round
metodo restituisce anche una nuova istanza di BigDecimal perché, come hai detto, le istanze sono immutabili.