Pet*_*Lee 2 java biginteger modular
在Java中,我们知道如果我们想要比较两个引用对象,我们通常需要使用equals,但在这里我对以下输出感到困惑:
System.out.println(new BigInteger("0") == BigInteger.ZERO); // false
System.out.println(new BigInteger("0").mod(BigInteger.ONE) == BigInteger.ZERO); // true
Run Code Online (Sandbox Code Playgroud)
为什么第二个陈述是真的?
花了一段时间,但遵循执行的逻辑路径将我们带到:
MutableBigInteger#toBigInteger(int sign)
其中有以下声明:
BigInteger toBigInteger(int sign) {
if (intLen == 0 || sign == 0)
return BigInteger.ZERO;
return new BigInteger(getMagnitudeArray(), sign);
}
Run Code Online (Sandbox Code Playgroud)
所以在这种情况下,BigInteger.ZERO返回常量,因此该语句为true.
堆栈跟踪:
BigInteger#mod(BigInteger)
BigInteger#remainder(BigInteger)
BigInteger#remainderKnuth(BigInteger)
MutableBigInteger#toBigInteger(int)
Run Code Online (Sandbox Code Playgroud)