Ein wichtiger Punkt, der erwähnt wird, aber nicht direkt angesprochen wird, ist die Differenz zwischen „Präzision“ und „Skala“ und wie sie verwendet werden in den zwei Aussagen. "Genauigkeit" ist die Gesamtzahl der signifikanten Stellen in einer Zahl. "scale" ist die Anzahl der Stellen rechts vom Dezimalpunkt.
Der MathContext-Konstruktor akzeptiert nur die Genauigkeit und den RoundingMode als Argumente und daher wird die Skalierung niemals in der ersten Anweisung angegeben.
setScale()
akzeptiert offensichtlich Skalierung als ein Argument sowie RoundingMode, jedoch wird Genauigkeit nie in der zweiten Anweisung angegeben.
Wenn Sie das Komma um eine Stelle nach rechts zu bewegen, wird der Unterschied deutlich:
// 1.
new BigDecimal("35.3456").round(new MathContext(4, RoundingMode.HALF_UP));
//result = 35.35
// 2.
new BigDecimal("35.3456").setScale(4, RoundingMode.HALF_UP);
// result = 35.3456
abgesehen von akzeptierten Antworten unten - setScale() erzeugt ein neues Objekt der BigDecimal - gegeben sein eine unveränderliche Klasse – prash
@ prash Die 'round'-Methode gibt auch eine neue Instanz von BigDecimal zurück, da die Instanzen wie erwähnt unwandelbar sind. – megaflop