How does Java handle integer overflows and underflows, and how can you detect them?

How does integer overflow in Java occur, and how does the language handle it?

Additionally, what are some effective ways to check or test if an overflow or underflow is happening in your code?

You can use explicit range checks that ensures safe addition without wraparound.

if (x > 0 && y > Integer.MAX_VALUE - x) { 
    throw new ArithmeticException("Overflow detected!"); 
}

You can use Math.addExact() and Math.subtractExact() :

int result = Math.addExact(a, b); // Throws ArithmeticException on overflow

You can use long for intermediate calculations:

long result = (long) a + b;
if (result > Integer.MAX_VALUE || result < Integer.MIN_VALUE) {
    throw new ArithmeticException("Overflow detected!");
}