Mais uma básica pessoal.
//Entrada de um nome qualquer
while(nome.toLowerCase() != "fim"){
// Ele esta entrando no loop mesmo se eu digitar fim por que ?
}
Mais uma básica pessoal.
//Entrada de um nome qualquer
while(nome.toLowerCase() != "fim"){
// Ele esta entrando no loop mesmo se eu digitar fim por que ?
}
Mais uma básica pessoal.//Entrada de um nome qualquer while(nome.toLowerCase() != "fim"){ // Ele esta entrando no loop mesmo se eu digitar fim por que ? }
Strings sao objetos imutaveis, quando vc faz nome.toLowerCase() provavelmente sua variavel nome nao esta sendo criada em caixa baixa entao é gerado um novo objeto String, para comparar Strings use o metodo equals()
String nome = "Fim";
while(!nome.toLowerCase().equals("fim")){
// Ele esta entrando no loop mesmo se eu digitar fim por que ?
System.out.println("nao entrou");
}
Olá diegohsi!
No lugar de comparações com “==” ou “!=” tente usar
while (!linha.equals("FIM")
Até mais!
Mais uma básica pessoal.
//Entrada de um nome qualquer while(nome.toLowerCase() != "fim"){ // Ele esta entrando no loop mesmo se eu digitar fim por que ? }
Pessoal consegui usando while(!){}nome.equals(“fim”)
Na verdade eles nunca serão iguais usando != pois há um new String() implicito e a sequência de bits que compreendem o objeto no heap comparando as Strings sempre serão diferentes ?? Estou certo pessoal.?
Desculpem é que estudei depois que postei, mas me confirmem por favor…
Hehe, o nosso amigo também postou a mesma coisa ao mesmo tempo. 
Até mais!
Enquanto vcs respondiam eu postei esta e não vi a resposta de vcs, muito obrigado pela resposta ultra rápida pessoal
rsrsrs
abraços
Você pode até brincar com contains
public class VerificaSeExisteString {
public static void main(String args[]) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String linha = "";
while (!linha.contains("FIM")) {
linha = reader.readLine();
System.out.println("Digitado: "+ linha);
}
}
}
Funcionaria, mas neste caso, óbvio que é perigoso, já que você poderia digitar “FIMO” e ele sairia.
Fica como curiosidade mesmo.
Até mais!
Mais uma básica pessoal.
//Entrada de um nome qualquer while(nome.toLowerCase() != "fim"){ // Ele esta entrando no loop mesmo se eu digitar fim por que ? }
Pessoal consegui usando
while(!){}nome.equals(“fim”)Na verdade eles nunca serão iguais usando != pois há um
new String()implicito e a sequência de bits que compreendem o objeto no heap comparando as Strings sempre serão diferentes ?? Estou certo pessoal.?Desculpem é que estudei depois que postei, mas me confirmem por favor…
Na verdade nao tem um new String() implicito não, o que ocorre é que quando vc cria uma String literal, quando a classe é carregada essa literal fica armazenada em um pool de Strings então quando vc usa o método toLowerCase() é verificado no pool se ja existe alguma String criada com o nome “fim”, como nao existia porque o que estava criado no pool era “Fim” então a comparação te retornava false e o while era executado, entendeu?
Não funciona pq == compara se duas referências estão no mesmo local da memória, e não valores.
Enquanto o equals compara valores.
Exemplo:
String x = "Vinicius";
String y = x; //y aponta para o mesmo endereço de x.
String z = new String("Vinicius");
System.out.println(x == y); //True
System.out.println(y == z); //False
System.out.println(x.equals(y)); True
System.out.println(y.equals(z)); True
String x = "Marcelo";
String y = "Marcelo";
System.out.println(x == y); //True
Vai dar true. Como as Strings são criadas por aspas, ele irá reaproveitar o Marcelo de cima na referência de baixo. O new força a criação de uma nova String.