使用"new"关键字或静态方法声明和初始化bigdecimal数字是更好的方法吗?

Ank*_*mar 9 java

我必须在项目中多次声明和初始化BigDecimal包装器对象.然后哪个更好的方法由Java代码:

BigDecimal num=new BigDecimal("123"); 
Run Code Online (Sandbox Code Playgroud)

或者在NumberUtils课堂上已经有一个静态方法可用

public static BigInteger createBigInteger(String str) {
    if (str == null) {
        return null;
    }
    return new BigInteger(str);
}

BigDecimal num=NumberUtils.createBigInteger("123"); 
Run Code Online (Sandbox Code Playgroud)

请告诉我,这是更好的方法,因为我们比较了性能(内存和速度).

Jon*_*eet 19

显然,createBigInteger正在做更多的工作 - 当你知道参数值无论如何都不为null时,它会检查是否为null.这只是一小部分额外的工作 - 几乎肯定在现实中无关紧要.

如果这确实是一个性能问题,我会感到惊讶- 你是否认为这是你代码中的瓶颈?如果没有,写下最可读的代码 - 对我来说这将是构造函数调用.然后确定您的性能要求,并针对它们测试整个系统.如果性能不佳,请编写更多测试或使用分析器来确定导致问题的区域.

另一种选择是使用BigDecimal(int)构造函数 - 为什么还要解析字符串呢?

BigDecimal num = new BigDecimal(123);
Run Code Online (Sandbox Code Playgroud)

如果您愿意,您甚至可以将其作为常量,因此您可以重用该对象:

private static final BigDecimal DEFAULT_FOOBAR_VALUE = new BigDecimal(123);

// In a method or whatever...
BigDecimal num = DEFAULT_FOOBAR_VALUE;
Run Code Online (Sandbox Code Playgroud)

除了表现之外,我认为这更清楚,因为它表明了常数的原因.

  • +1 90%的努力,10%因为我想看看SO如何打印1mln代表 (5认同)
  • 如果性能是目标,我认为常量是要走的路 - 因为BigDecimal是不可变的,所以它很合适. (2认同)