Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

232
Vistas
¿Es este un escenario en el que un booleano de Java puede ser nulo? ¿Por qué se compila este código?

Recientemente nos encontramos con un error en la producción que me pareció muy interesante. Mi comprensión desde hace mucho tiempo es que un booleano de Java solo puede ser falso o verdadero. Sin embargo, parece que en un Operador Ternario puede resolverse en última instancia como nulo, y nunca produjo un error de compilación, y se construyó todo el camino hasta la producción. Estoy muy sorprendido de que el siguiente código no genere un error de compilación. ¿Alguien sabe por qué compila bien? En mi humilde opinión, no debería compilar! El valor al que finalmente se resuelve es un valor booleano nativo.

 boolean por = (str == null || str.length() == 0) ? null : "true".equalsIgnoreCase(str);
over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

¿Alguien sabe por qué compila bien?

En última instancia, debido al autoboxing / autounboxing.

Cuando el compilador procesa una expresión ternaria, utiliza el segundo y tercer operandos para elegir el tipo de resultado de la expresión. En su caso, el segundo tiene un tipo nulo y el tercero tiene un tipo boolean (primitivo). Estos no son directamente compatibles, pero debido al autoboxing, ambos son compatibles con el tipo Boolean . Por lo tanto, el resultado de la expresión es de tipo Boolean , que admite null .

Debido al desbloqueo automático, se permite asignar un valor de tipo Boolean a una variable de tipo boolean , pero esto fallará con una NullPointerException en el caso de que el valor asignado sea nulo, como si hubiera invocado el booleanValue() método en él. Supongo que este es el error que observaste en producción.

Esta es una de las trampas del autoboxing.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda