我们已经多次看过这个问题,有人可以解释一下这种情况是如何实现的,因为BigDecimal是不可变的吗?
java.lang.Thread.State: RUNNABLE
2014/03/03 17:10:17.517 | INFO | jvm 1 | at java.math.BigInteger.<init>(Unknown Source)
2014/03/03 17:10:17.517 | INFO | jvm 1 | at java.math.BigDecimal.bigTenToThe(Unknown Source)
2014/03/03 17:10:17.517 | INFO | jvm 1 | at java.math.BigDecimal.bigDigitLength(Unknown Source)
2014/03/03 17:10:17.517 | INFO | jvm 1 | at java.math.BigDecimal.precision(Unknown Source)
2014/03/03 17:10:17.517 | INFO | jvm 1 | at java.math.BigDecimal.compareMagnitude(Unknown Source)
2014/03/03 17:10:17.517 | INFO | jvm 1 | at java.math.BigDecimal.compareTo(Unknown Source)
这怎么可能发生?
答案 0 :(得分:1)
BigDecimal.bigTenToThe
方法正在调用BigInteger
构造函数
这就是它挂起的地方。请参阅源代码中的以下注释
这在很大程度上取决于你所称的论点。
另外,请参阅return语句。不确定你的联系
看到可变性。我在这里看不到任何东西。
/**
* Return 10 to the power n, as a {@code BigInteger}.
*
* @param n the power of ten to be returned (>=0)
* @return a {@code BigInteger} with the value (10<sup>n</sup>)
*/
private static BigInteger bigTenToThe(int n) {
if (n < 0)
return BigInteger.ZERO;
if (n < BIG_TEN_POWERS_TABLE_MAX) {
BigInteger[] pows = BIG_TEN_POWERS_TABLE;
if (n < pows.length)
return pows[n];
else
return expandBigIntegerTenPowers(n);
}
// BigInteger.pow is slow, so make 10**n by constructing a
// BigInteger from a character string (still not very fast)
char tenpow[] = new char[n + 1];
tenpow[0] = '1';
for (int i = 1; i <= n; i++)
tenpow[i] = '0';
return new BigInteger(tenpow);
}