Pregunta Java: un assert que nunca falla

2 min de lectura

Piensa la respuesta antes de abrirla. Todas las opciones parecen razonables, y casi siempre hay un detalle que lo cambia todo.

Pregunta Java · Assertions

Suponiendo que ejecutas la clase Prueba con java -enableassertions Prueba, ¿cuál es el resultado?

public class Prueba {

    public static void main(String... args) {
        for (int i = 2; i < 4; i++) {
            for (int j = 2; j < 4; j++) {
                if (i < j) {
                    assert i != j : i;
                }
            }
        }

    }
}
  1. Exception in thread "main" java.lang.AssertionError: 1
  2. Exception in thread "main" java.lang.AssertionError: 2
  3. Se ejecuta y no imprime nada
  4. Error de ejecución
Ver la respuesta

Respuesta: c.

java -enableassertions Prueba(no imprime nada)
[código 0]

El assert solo se evalúa cuando i < j, y en ese caso i != j siempre es cierto, así que la condición nunca falla. El valor que va detrás de los dos puntos (: i) solo se usaría como mensaje del AssertionError, y aquí no llega a usarse.

Por omisión, la máquina virtual ignora los assert: hay que activarlos con -enableassertions (o -ea). Por eso no sirven para validar datos de entrada en un programa en producción, sino para comprobar suposiciones durante el desarrollo.

Pregunta publicada en 2014 y revisada en octubre de 2026. La respuesta se comprobó compilando y ejecutando el código con Java 25 LTS en un contenedor limpio; las salidas están copiadas de esa ejecución.

7 comentarios en «Pregunta Java: un assert que nunca falla»

  1. Alguien me podría explicar el porque de los dos puntos en la linea
    Assert i < j : i;
    Entiendo que esta comparando un valor booleano sobre si i es menos que j sin embargo no entiendo lo demás a partir de los dos puntos.
    Por su atención gracias!

    Responder

Deja un comentario