我听说使用BigDecimal.valueOf()
方法比调用new BigDecimal()
更好,因为它缓存常见的值。我想知道valueOf
的缓存机制是如何工作的。
我听说使用BigDecimal.valueOf()
方法比调用new BigDecimal()
更好,因为它缓存常见的值。我想知道valueOf
的缓存机制是如何工作的。
import java.math.BigDecimal;
public class Test {
public static void main(String[] args) {
for (long x = 0; x < Long.MAX_VALUE; x++) {
if (BigDecimal.valueOf(x) != BigDecimal.valueOf(x)) {
System.out.println("Value for " + x + " wasn't cached");
break;
}
}
}
}
在我的 Java 8 计算机上,输出如下:
值为 11 的内容未被缓存
当然,一种实现方法 可能会 始终缓存最近请求的值,那么上述代码将运行很长时间,最后没有任何输出...
public static final BigInteger ZERO = new BigInteger(new int[0], 0);
public static final BigInteger ONE = valueOf(1);
private static final BigInteger TWO = valueOf(2);
public static final BigInteger TEN = valueOf(10);
那也会调用valueOf(x)方法。