Strings literais (nome1 = “sheen”, por exemplo) ficam no mesmo lugar, o pool de strings literais (string literal pool).
Strings não-literais (new String(“sheen”)) ficam na heap.
Por isso ao fazer o primeiro println ele dá true (nome1 aponta pra mesma instância do pool que nome2) e o segundo println dá false (nome2 aponta pra uma instância do pool e nome3 é da heap, lugares diferentes).
Procure comparar sempre usando o método equals(), que compara o conteúdo do objeto.
henriquecosta
Acho que é porque a comparação por ‘==’ só pega valores para tipos primitivos, o que não é o caso da Classe String …
Provavelmente nome1 e nome 2 estão referenciando o mesmo objeto na memória, que contém a String “shenn” … e
nome3 vc referenciou a um novo objeto, que é óbvio é diferente do outro, por isso á false
Stringnome="João da Silva"Stringnome2="Maria Aparecida"if(nome.equals(nome2)){
//façaalgoseforigual
}else{
//façaalgumacoisasefordiferente...
}
Abraço,
Rodrigo_Sasaki
publicstaticvoidmain(String[]args){Stringnome1="shenn";// Cria uma nova String literal "shenn" no pool e referencia a ela.Stringnome2="shenn";// referencia à String literal "shenn" ja existente no poolStringnome3=newString("shenn");// Cria um novo objeto String no heap, e referencia a ele.System.out.println(nome1==nome2);System.out.println(nome2==nome3);}
Altere a linha 4 para
Stringnome3=newString("shenn").intern();
e veja o que acontece.
R
rzandonai
sim mais mesmo assim acho que .equals() resolve o problema dele
caso queria comparar sem se preocupar maiusculas e minusculas
.equalsignorecase()
caiofabioa
E quando eu quiser comparar para receber um valor falso, por exemplo
se string1 for diferente de string 2 então faça isso
.equals não vai me ajudar nisso, há outro comando?
R
rzandonai
caiofabioa:
E quando eu quiser comparar para receber um valor falso, por exemplo
se string1 for diferente de string 2 então faça isso
.equals não vai me ajudar nisso, há outro comando?
neste caso tu podes usar if (not (string1.equals(string2))){