Questão interessante

Ae galera achei a questão abaixo super interessante e resolvi postar:

boolean b1 = false;
boolean b2 = false;

if ( b2!= b1 = !b2 )
   System.out.println("true");
else
   System.out.println("False");

Quais das alternativas abaixo são verdadeiras com relação ao trecho de código acima:

A) O código a seguir não compila
B) O código a seguir compila sem problemas e exibe: "true"
C) O código a seguir compilar sem problemas e exibe: "false"
D) O código a seguir lança uma RuntimeException

:roll: Bom a maioria de vocês vai se surpreender com a resposta…

Vamos pôr os parênteses onde é mais difícil entender.

b2!= b1 = !b2

equivale a

(b2 != b1) = !b2

mas o problema é que (b2 != b1) não é um “L-Value” (ou seja, uma variável), então isso não compila.

Se o seu problema fosse

b2!= b1 == !b2

seria um pouco diferente, pois equivale a:

(b2 != b1) == !b2

e isso é fácil de calcular.

EDIT - é pena que não tem uma opção de “deixar as letras de cabeça para baixo” para a gente poder dar tempo para quem quiser responder à questão acima, sem olhar esta resposta.

Perfeito, pena que quando eu fui fazer estava com a mente meia “nublada” e não pensei assim! :cry: