Java BigDecimal-BigDecimal=BigDecimal.ONE;

Java BigDecimal-BigDecimal=BigDecimal.ONE;,java,Java,当你这样做的时候 BigDecimal bigDecimal = BigDecimal.ONE; 为什么bigDecimal会成为新对象?在这种情况下,变量(或字段)bigDecimal不会成为新对象。它只是对现有静态字段java.math.BigDecimal.ONE引用的对象的引用 对象本身(表示1的对象)只创建一次:加载类BigDecimal时。对于Java 7,这是使用新的BigDecimal(biginger.ONE,1,0,1)完成的 您所做的分配比您自己使用=new BigDec

当你这样做的时候

BigDecimal bigDecimal = BigDecimal.ONE;

为什么bigDecimal会成为新对象?

在这种情况下,变量(或字段)
bigDecimal
不会成为新对象。它只是对现有静态字段
java.math.BigDecimal.ONE
引用的对象的引用

对象本身(表示
1
的对象)只创建一次:加载类
BigDecimal
时。对于Java 7,这是使用
新的BigDecimal(biginger.ONE,1,0,1)
完成的


您所做的分配比您自己使用
=new BigDecimal(…)
创建一个新对象要好,因为现有对象已被重用。

未分配新对象
bigDecimal
引用与
bigDecimal.ONE
相同的对象

如果你以后做的话

bigDecimal = bigDecimal.add(BigDecimal.ONE);

对另一个对象(其值为2)的引用将分配给
bigDecimal
。在该语句之后,
bigDecimal
bigDecimal.ONE
不再指向同一个对象。

来自Java文档

公共静态最终大十进制1

值为1,比例为0


然后,一个是静态的,并且是同一个类加载器上下文上的同一个实例对象

很抱歉,我不明白它,如果你然后bigdecim=bigdecim.add(bigdecim.ONE);那么bigDecimal将是=2
bigDecimal
是不可变的,因此当您分配
bigDecimal=bigDecimal.add(bigDecimal.ONE)
时,从
add
方法返回一个新对象(即
add
不会修改对
bigDecimal.ONE
的引用)。更准确地说,它是对现有静态字段
BigDecimal.ONE
引用的同一对象的引用。(也就是说,它是对对象的引用,而不是对字段的引用。)好的,但是当您使用bigdecim=bigdecim.add(bigdecim.ONE)时;然后bigDecimal是2(仅使用bigDecimal bigDecimal=bigDecimal.1;System.out.println(bigDecimal);bigDecimal=bigDecimal.add(bigDecimal.1);System.out.println(bigDecimal);output:12将这两个变量与==(
bigDecimal和
bigDecimal.1`)进行比较)-它将返回true,这意味着基础对象是相同的。为什么您认为它是相同的呢。