Hello Andrey, Indeed that appears to be incorrect. I filed [1] to track it.
Thanks, Brian [1] https://bugs.openjdk.java.net/browse/JDK-8272541 On Aug 15, 2021, at 2:12 AM, Andrey Turbanov <turban...@gmail.com<mailto:turban...@gmail.com>> wrote: I found suspicious condition in method "java.math.BigInteger#multiply(java.math.BigInteger, boolean)" It's detected by IntelliJ IDEA inspection 'Constant conditions & exceptions' ``` if (bitLength(mag, mag.length) + bitLength(val.mag, val.mag.length) > 32L*MAX_MAG_LENGTH) { reportOverflow(); } ``` Method bitLength returns 'int', hence the left operand of '>' comparison is 'int' too. But the right operand of '>' comparison is 'long' with value == Integer.MAX_VALUE + 1. It means this condition is always false. Reproducer: BigInteger a = new BigInteger(1073742825, ThreadLocalRandom.current()); BigInteger b = new BigInteger(1073742825, ThreadLocalRandom.current()); BigInteger c = a.multiply(b);