注意:同样的问题适用于其他不可变类型,如String和Boolean。
我有这样的方法(这是一个更复杂的方法的简单例子):
public BigDecimal addTwo(BigDecimal bigDecimal) { bigDecimal = bigDecimal.add(new BigDecimal(2)); return bigDecimal;}
我知道,我可以简单地回来bigDecimal.add(new BigDecimal(2))
。但这只是一个例子。
这段代码的问题是我无法添加final
到方法参数和Eclipse困扰我。所以我会写:
public BigDecimal addTwo(final BigDecimal bigDecimal) { BigDecimal bigDecimalLocal = bigDecimal; bigDecimalLocal = bigDecimalLocal.add(new BigDecimal(2)); return bigDecimalLocal;}
我知道,我可以直接做BigDecimal bigDecimalLocal = bigDecimal.add(new BigDecimal(2))
。但我再说一遍,这只是一个例子。
问题是:当我这样做时:
BigDecimal bigDecimalLocal = bigDecimal;
我不是在创造一个新的BigDecimal
。我将同一个对象分配给另一个变量。我在SO上发现了一种简单的克隆BigDecimal
方法:
BigDecimal bigDecimalLocal = new BigDecimal(bigDecimal.toString());
问题是:既然BigDecimal
是不可改变的,这真的有必要吗?我不能像示例#2那样简单吗?我认为final
关键字不能以这种方式失效。
开心每一天1111
梦里花落0921
相关分类