¿Cómo puedo verificar si multiplicar dos números en Java causará un desbordamiento?

Quiero manejar el caso especial donde multiplicar dos números juntos provoca un desbordamiento. El código se ve algo como esto:

int a = 20;
long b = 30;

// if a or b are big enough, this result will silently overflow
long c = a * b;

Esa es una versión simplificada. En el programa reala yb se obtienen en otro lugar en el tiempo de ejecución. Lo que quiero lograr es algo como esto:

long c;
if (a * b will overflow) {
    c = Long.MAX_VALUE;
} else {
    c = a * b;
}

¿Cómo sugieres que mejor codifique esto?

Actualizar:a yb Siempre son no negativos en mi escenario.

Respuestas a la pregunta(14)

Su respuesta a la pregunta