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! 