当某个BigInteger b检查BigInteger a的可除性时,我可以编写a.mod(b).equals(BigInteger.ZERO)或a.remainder(b).equals(BigInteger.ZERO).
哪两个表达式更有效?
编辑:有几个人正确地指出mod不接受负模数.请假设答案中b为正数.
解决方法
这些方法之间的区别记录在
Javadoc中.从
mod(m)
开始:
This method differs from
remainder
in that it always returns a non-negative BigInteger.
此外,如果给定的参数为负数,则此方法抛出ArithmeticException
,根据您的编辑,这不是您的情况.因此,为了测试可分性,mod和余数之间没有区别:当其中一个为0时,另一个也为0.你可以使用余数,因为mod可以进行另一个你不需要的计算.
要了解行动的不同,请考虑以下事项:
public static void main(String[] args) { BigInteger a = BigInteger.valueOf(-2); BigInteger b = BigInteger.valueOf(3); System.out.println(a.remainder(b)); // prints -2 System.out.println(a.mod(b)); // prints 1 == -2 (i.e. the remainder) + 3 }
这实际上是原始int a和b与计算%b(其行为类似于余数)和Math.floorMod(a,b)
(其行为类似于mod)的相同差异.