adam bien's blog

Java 8: Catching Integer Overflows 📎

In Java the addition: Integer.MAX_VALUE + Integer.MAX_VALUE results in -2 without complaining. The following unit test passes:

    
        @Test
        public void addWithOverflow() {
            int result = Integer.MAX_VALUE + Integer.MAX_VALUE;
            assertThat(result, is(-2));
        }
    

Java 8 allows you to catch the overflows as ArithmeticException instances by using the Math.addExact (multiplyExact, subtractExact etc.) method.

The following test also passes:

    
        @Rule
        public ExpectedException expected = ExpectedException.none();
    
        @Test
        public void addWithOverflowAndCatch() {
            expected.expect(ArithmeticException.class);
            expected.expectMessage(containsString("integer overflow"));
            Math.addExact(Integer.MAX_VALUE, Integer.MAX_VALUE);
        }    

See you at Java EE Workshops at Munich Airport, Terminal 2 or Virtual Dedicated Workshops / consulting. Is Munich's airport too far? Learn from home: airhacks.io.