以下两行代码有什么区别?
BigDecimal one = new BigDecimal("1");
BigDecimal two = BigDecimal.ONE;
这两条线路是否相同?
谢谢!
答案 0 :(得分:14)
不,它们并不完全相同 - 第一个在每次执行时分配一个新对象(并且还必须解析该值);第二个将每次使用对同一现有对象的引用。
由于BigDecimal
是不可变的,您可以自由地重用现有实例 - 因此有必要参考一个“预先设定”的对象,您可以在其中知道该值是什么。
答案 1 :(得分:2)
BigDecimal.ONE是一个预先扫描的对象,与
相比,它在内存利用率方面更有效BigDecimal one = new BigDecimal(" 1");
因为在这一行中它首先创建一个实例,然后解析字符串" 1"然后分配。
而BigDecimal.ONE就像一个常量,会给你直接的价值。
希望这有帮助!