从字符串实例化BigDecimal的最快方法

时间:2012-11-03 13:57:11

标签: java performance instantiation bigdecimal

考虑一个

的应用程序
  1. 从文本文件中读取数千个String值。
  2. 选择(通过正则表达式匹配)表示数字的值(从简单整数到用科学记数法用尾数书写的非常大的值)。
  3. 对于表示数字的每个String值,实例化一个BigDecimal对象(每秒数千个Bigdecimal对象的总速率)。
  4. 使用每个实例化的BigDecimal对象进行进一步处理。
  5. 鉴于上述情况,显然每个BigDecimal对象的实例化都会对性能产生影响。

    从非空字符串BigDecimal实例化那些str对象的一种方法是:

    BigDecimal number = new BigDecimal(str.toCharArray(), 0, str.length()));
    

    这正是OracleJDK BigDecimal实施中扩展到的内容。

    是否有更快的方式从这些字符串中实例化{{1}}个对象,或通过其他方法?

3 个答案:

答案 0 :(得分:3)

我会用

BigDecimal number = new BigDecimal(str);

这更简单,差异不太重要。

如果您需要提高性能且准确度不超过15位,则可以使用double代替。

你需要表现我会在微观优化之前看一下整个应用程序的性能。您提到使用正则表达式,这可以使用比创建字符串或BigDecimal更多的CPU。你能描述你的申请吗?

答案 1 :(得分:1)

我同意这种区别不太重要,但我会使用valueOf,因为未来版本的java可能会缓存很多常用数字。

答案 2 :(得分:0)

如果有很多数字可能相同,那么HashMap<String, BigDecimal> BigDecimal值的{{1}}'缓存'可能会更快。