3

考虑一个应用程序

  1. String从文本文件中读取数千个值。
  2. 选择(通过正则表达式匹配)那些表示数字的值(从简单的整数到用尾数用科学计数法编写的非常大的值)。
  3. 对于表示数字的每个String值,实例化一个BigDecimal对象(以每秒数千个 Bigdecimal 对象的总速率)。
  4. 使用每个实例化BigDecimal的对象进行进一步处理。

鉴于上述情况,显然每个BigDecimal对象的实例化都会对性能产生影响。

BigDecimal从非空 String实例化这些对象的一种方法str是:

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

这正是BigDecimal 的 String 构造Oracle函数在JDK.

有没有更快的方法BigDecimal从这些字符串中实例化对象,或者通过另一种方法?

4

3 回答 3

3

我会用

BigDecimal number = new BigDecimal(str);

哪个更简单,并且差异不太重要。

如果您需要性能并且不需要超过 15 位的准确度,则可以使用double

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

于 2012-11-03T14:32:54.833 回答
1

我同意差异不太可能重要,但是我会使用valueOf,因为未来的 java 版本可能会缓存很多常见的数字。

于 2012-11-03T14:54:23.960 回答
0

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

于 2012-11-26T20:12:42.240 回答