BigDecimalはImmutableだ。


BigDecimal ammount = new BigDecimal("0");
ammount.add(new BigDecimal("100");
System.out.println(ammount);
というようなコードを動かしていて、一向にBigDecimalに値が加算されず0のままであるような状態にはまった。原因はBigDecimalはImmutableなので、addメソッド呼ぼうが、subtractメソッド呼ぼうがオブジェクトの状態は変わらないという点にあった。
このコードを直すには、

BigDecimal ammount = new BigDecimal("0");
ammount = ammount.add(new BigDecimal("100");
System.out.println(ammount);
というように、addメソッドの戻りを受けなければならない。


Javaの言語仕様にImmutableなクラスの場合、戻り値を呼び出し側で受けなければならないというような指定が出来たら便利かもと思った。


というか、俺この罠にはまるの2,3回目かも。いい加減覚えろ俺。