下面这两行代码有什么区别?
这两行代码是一样的吗?
谢谢!
BigDecimal one = new BigDecimal("1");
BigDecimal two = BigDecimal.ONE;
这两行代码是一样的吗?
谢谢!
BigDecimal one = new BigDecimal("1");
BigDecimal two = BigDecimal.ONE;
new BigDecimal("1")
每次执行都会分配一个新的对象(并且还需要解析值);而 BigDecimal.ONE
则每次使用对同一个现有对象的引用。BigDecimal
是不可变的,因此您可以自由地重复使用现有实例 - 因此指定已知值的“预先制成”对象是有意义的。BigDecimal.ONE
是一个预扫描对象,与其他对象相比在内存利用方面更加高效。
BigDecimal one = new BigDecimal("1");
因为在这一行代码中首先创建了一个实例,然后解析字符串"1"
,最后进行赋值操作。
而BigDecimal.ONE
则像一个常量,可以直接给出数值。
希望这能帮到你!
a == b
(即身份比较),那么是的,您的代码将表现不同。如果您只执行a.equals(b)
,那么不会。 - dtyBigDecimal
引用,那么是的,你会看到一个变化。目前我们不知道你对该值做了什么。如果你使用它得当,除了减少工作量外,不应该看到任何变化。 - Jon Skeet