当你做这样的事情BigDecimal bigDecimal = BigDecimal.ONE;
BigDecimal bigDecimal = BigDecimal.ONE;
为什么BIGDECIMAL 成为一个新的对象?
当你做这样的事情BigDecimal bigDecimal = BigDecimal.ONE;
BigDecimal bigDecimal = BigDecimal.ONE;
为什么BIGDECIMAL 成为一个新的对象?
在这种情况下,变量(或字段)bigDecimal
不会成为新对象。它只是对由现有静态字段java.math.BigDecimal.ONE
引用的对象的引用。
对象本身(代表1
的对象)仅创建一次:加载类BigDecimal
时。对于Java 7,这是使用new BigDecimal(BigInteger.ONE, 1, 0, 1)
完成的。
您所做的任务优于使用= new BigDecimal(...)
自己创建新对象,因为现有对象已被重新使用。
对不起,但我不明白,如果你那么bigDecimal = bigDecimal.add(BigDecimal.ONE);那么bigDecimal就是= 2 – user3234625
'BigDecimal'是不可变的,所以当你赋值'bigDecimal = bigDecimal.add(BigDecimal.ONE)'时,'add'方法返回一个新对象(即'add'不会修改引用到'BigDecimal.ONE')。 – Cascader
更准确地说,它是对现有静态字段BigDecimal.ONE引用的同一个对象的引用。 (也就是说,它是对象的引用,而不是字段。) – yshavit
没有分配新对象。 bigDecimal
指的是与BigDecimal.ONE
相同的对象。
如果以后做
bigDecimal = bigDecimal.add(BigDecimal.ONE);
到另一个对象(其具有值2)的参考将被分配到bigDecimal
。在该声明bigDecimal
和BigDecimal.ONE
之后不再指向同一个对象。
好的,但是当你bigDecimal = bigDecimal.add(BigDecimal.ONE); 的System.out.println(BIGDECIMAL); BIGDECIMAL = bigDecimal.add(BigDecimal.ONE); 的System.out.println(BIGDECIMAL然后BIGDECIMAL是2(只是 的BigDecimal BIGDECIMAL = BigDecimal.ONE测试); 输出: 2 – user3234625
从Java文档
公共静态最终的BigDecimal ONE
值1,具有0
然后ONE是静态的并且是相同的实例对象上的刻度相同的类加载器上下文。
比较两个==('bigDecimal和'BigDecimal.ONE') - 它会返回true,这意味着底层对象是相同的。 – berry120
你为什么相信它的确如此。 –