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;
}
}
}
}
}Exception in thread "main" java.lang.AssertionError: 1Exception in thread "main" java.lang.AssertionError: 2- Se ejecuta y no imprime nada
- 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.
Más preguntas de Java
- El orden de un HashSet
- wait() sin el monitor correcto
- start() con un argumento
- Dos hilos y una variable compartida
- wait() fuera de synchronized
- Leer más allá del final de un archivo
- binarySearch con null
- Serializar una clase cuyo padre no es Serializable
- Clases internas anidadas
- Llamar a run() en vez de start()
- HashSet sin equals ni hashCode
- Campos transient al serializar
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.
respuesta = c
C
C
Primera entrada en bucle, 2 =! 2 false y devuelve i que vale 2 😉
respuesta B
JP
C
Se ejecuta y no imprime nada, falta assert false, si se agrega imprime " Exception in thread "main" java.lang.AssertionError: 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!