Bom Dia p/ todos;
Bom galera sou novo nesse mundo loco que e o Java , pois bem to com um duvida sobre a seguinte função dos operadores tenário, pra facilitar esse e o codigo que tenho duvida em relação a sua sainda:
class Calculo{
public static void main(String args[]){
boolean b = false;
String s = (b=!b)?(b=!b)?"Hello":"hello":(b=!b)?"world":"World";
System.out.println(s);
}
}
Bom eu sei que a saída desse código será apenas a palavra hello em minusculo , mais ai e que fica a parte q não entendi porque não e impresso também a palavra world em minusculo :?:
Bom galera sou novo tanto no java quanto no forum então se tiver feito algo de errado me desculpe !!!
porque é uma condição, ou vai ser uma saída ou a outra.
(b=!b)?(b=!b)?"Hello":"hello"
testou a primeira, é false, testou a segunda é false, imprime hello e termina as verificações.
se fosse true na segunda verificação iria imprimir o Hello e tbem sairia.
O operador ternário é uma espécie de “if”. Se um lado da expressão for avaliado, o outro não será.
Melhorando um pouco a identação e colocando parênteses fica mais fácil de entender:
[code]class Calculo {
public static void main(String args[]) {
boolean b = false;
String s = (b = !b) ?
((b = !b) ? "Hello" : "hello") :
((b = !b) ? "world" : "World");
System.out.println(s);
}
}
[/code]
Essa questão também mostra uma maneira porca e mal escrita de como não se deve usar o operador ternário e a atribuição.
Note que a primeira avaliação de b = !b dá true, o que faz ele entrar na parte de cima.
A segunda, dá false, pois a atribuição inverteu o valor de b, o que faz ele entrar em hello.
Bom galera vlw’s mesmo agora entendi o que realmente acontece ViniGodoy e kleberdamasco brigadão pela explicação, e Vini realmente da forma que vc endentou o codigo consegui compreender melhor !!
Vlw’s Galera