publicclassPrincipal{publicstaticvoidmain(String[]args){Stringstr=null;if(str==null|str.equals(""))System.out.println("É nulo ou eh vazio");}}
Qual o resultado:
java.lang.NullPointerException. Simplesmente por causa do operador | (ou não inteligente) se fosse ||(ou inteligente) não daria:
Ou seja
if(str==null||str.equals(""))System.out.println("É nulo ou eh vazio");
Iria imprimir “É nulo ou eh vazio”, simplesmente porque o operador |(ou) , testa todas as expressões para verificar o resultado, e o ||(ou) testa até achar uma verdadeira e já retorna verdadeiro!!
vou torcer para cair algo nesse nivel na minha prova =)
nao eh q ele testa ate achar a opcao verdadeira…e se nao tiver? :?
o operador | ele passa em tds as expressoes…ate se a primeira exp. for verdadeira…
ja o || ele nao analisa a 2 expr. se a 1 for verdadeira …
abs
S
Schuenemann
Já vi cair questões desse tipo na prova, mas não tão básicas.
Envolviam i++ e ++i e as expressões eram métodos que retornavam boolean.
Mas, afinal, qual é a utilidade dos operadores & e | em comparações lógicas? Legado?
L
Lintz_net
Legal a questão!!.
Eu não acho que seja uma questão facil…o problema não é em saber que o operador | compara os dois lados e || compara apenas o lado esquedo(isso realmente é basico para a prova).O problema é em saber que no método public boolean equals(Object arg) implementando na classe String ele tenta comparar null == “” e isso faz lançar uma NullPointerException.Se o método tivesse algum tratamento para o null a resposta teria sido outra, ou seja, foi necessario conhecer a implementação do método equals() na classe String tbm.E para quem está começando os estudo para certificação não é obrigado a conhecer como o método equals na classe String foi implementado…
Abraços
rodrigoallemand
Te garanto que muita gente cai nessa questão na hora da prova…
E te digo mais, existem questões na nova certificação (1.5) que são muito mais ridiculas do que esta…
S
Schuenemann
Lintz_net:
Legal a questão!!.
Eu não acho que seja uma questão facil…o problema não é em saber que o operador | compara os dois lados e || compara apenas o lado esquedo(isso realmente é basico para a prova).O problema é em saber que no método public boolean equals(Object arg) implementando na classe String ele tenta comparar null == “” e isso faz lançar uma NullPointerException.Se o método tivesse algum tratamento para o null a resposta teria sido outra, ou seja, foi necessario conhecer a implementação do método equals() na classe String tbm.E para quem está começando os estudo para certificação não é obrigado a conhecer como o método equals na classe String foi implementado…
Abraços
Não viaja. Independente de qual seja o método, você está chamando null.metodo(), que obviamente gera exceção. E o método equals() trata null.
A questão é realmente boba.
danilomunoz
Também considero fácil!
Esses tipos de questões tem que ser analisadas com muita atenção. Acho que o problema está quando você lê e passa despercebido.
Exemplos:
(x | y)
e
(x || y)
Outro:
boolean a = true; boolean b = false;
if(a!=b){//xxxxxx}
eif(a=!b){//xxxxxx}
Essa jogadas de caracter acabam confundindo. Por isso atenção e paciência são essenciais.
Olá, não entendi, esse pq não pegou minha exceção ??
Aqui ele imprimi a stack trace correta:
java.lang.NullPointerException
Att
P
pardal_nb
danielbussade:
Olá, não entendi, esse pq não pegou minha exceção ??
Aqui ele imprimi a stack trace correta:
java.lang.NullPointerException
Att
é, viajei msm…
ViniGodoy
Você pode usar isso para tornar uma expressão aparentemente simples em algo um pouco mais cavernoso… como isso:
intx=4;inty=2;if(((x|y)==6)|((x&y)==0)){
}
Agora é só perguntar se o código compila. Fica mais malicioso pq mistura operadores binários com os operadores lógicos sem curto circuito. E “cheira” errado para o despreparado.