当你做这样的事情时
BigDecimal bigDecimal = BigDecimal.ONE;
为什么bigDecimal 成为新对象?
答案 0 :(得分:8)
在这种情况下,变量(或字段)bigDecimal
不会成为新对象。它只是对现有静态字段java.math.BigDecimal.ONE
引用的对象的引用。
对象本身(代表1
的对象)只创建一次:加载类BigDecimal
时。对于Java 7,这是使用new BigDecimal(BigInteger.ONE, 1, 0, 1)
完成的。
您所做的任务比使用= new BigDecimal(...)
自己创建新对象更好,因为现有对象会被重复使用。
答案 1 :(得分:1)
没有分配新对象。 bigDecimal
引用与BigDecimal.ONE
相同的对象。
如果你以后做
bigDecimal = bigDecimal.add(BigDecimal.ONE);
对另一个对象(值为2)的引用将分配给bigDecimal
。在该语句之后bigDecimal
和BigDecimal.ONE
不再指向同一个对象。
答案 2 :(得分:0)
来自Java文档
public static final BigDecimal ONE
值1,刻度为0.
然后 ONE是静态的,并且是同一个类加载器上下文中的相同实例对象。