La differenza tra questi metodi è documentata in Javadoc. Da mod(m)
:
Questo metodo differisce dalla remainder
in quanto restituisce sempre un BigInteger non negativo.
Inoltre, questo metodo genera uno ArithmeticException
se l'argomento specificato è negativo, che, come per la modifica, non è il tuo caso. Come tale, per verificare la divisibilità, non ci sarà differenza tra mod
e remainder
: quando uno di questi è 0 l'altro sarà pari a 0. Potresti semplicemente usare remainder
dato che mod
può fare un altro calcolo che non ti serve.
Per vedere la differenza in azione, considerare quanto segue:
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
}
Questo è in realtà la stessa differenza di primitivo int
a
e b
e calcolando a % b
(che si comporta come remainder
) e Math.floorMod(a, b)
(che si comporta come mod
).
Utilizzare 'remainder' se si desidera controllare che sia diverso da zero. 'mod' fa' remainder' con un piccolo calcolo in più. – khelwood
Un dettaglio di implementazione - L'implementazione di OpenJDK di 'mod()' chiama 'remainder()' sotto il cofano. –