Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

236
Visualizações
¿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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda