Java BigDecimal.ONE与新的BigDecimal(“1”)之间的差异

Java BigDecimal.ONE与新的BigDecimal(“1”)之间的差异,java,Java,下面两行代码的区别是什么 BigDecimal one = new BigDecimal("1"); BigDecimal two = BigDecimal.ONE; 两条线都一样吗 谢谢 不,它们不完全相同-第一个在每次执行时分配一个新对象(并且还必须解析值);第二个将每次使用对相同现有对象的引用 由于BigDecimal是不可变的,您可以自由地重用现有实例-因此引用“预屏蔽”对象是有意义的,因为您知道该值将是什么。BigDecimal.ONE是预扫描对象,它在内存利用率方面比 BigDec

下面两行代码的区别是什么

BigDecimal one = new BigDecimal("1");
BigDecimal two = BigDecimal.ONE;
两条线都一样吗


谢谢

不,它们不完全相同-第一个在每次执行时分配一个新对象(并且还必须解析值);第二个将每次使用对相同现有对象的引用


由于
BigDecimal
是不可变的,您可以自由地重用现有实例-因此引用“预屏蔽”对象是有意义的,因为您知道该值将是什么。

BigDecimal.ONE是预扫描对象,它在内存利用率方面比

BigDecimal one=新的BigDecimal(“1”)

因为在这一行中,它首先创建一个实例,然后解析字符串“1”,然后赋值

而BigDecimal.ONE就像一个常量,会给你直接的值


希望这有帮助

@Skeet:谢谢你的回复。功能方面两者都是一样的对吗?如果执行了该方法。我的意思是这两行产生相同的输出。@user1016403:它们返回对相等对象的引用,是的。但这种差异仍然可以检测出来。这取决于你对它们做了什么。@Skeet:我有一个方法。目前我使用的是BigDecimalOne=new BigDecimal(“1”);。我可以用BigDecimal two=BigDecimal.ONE;替换它吗;。会有影响吗?谢谢正如乔恩所说,这取决于你以后如何处理它们。如果您执行
a==b
,(即身份比较),则是,您的代码将表现出不同的行为。如果你只做a.equals(b),那么不@dty:我不会同时使用这两行。我会使用这两行中的任何一行。会有影响吗?