Estava ajudando um amigo a corrigir uns trabalhos de faculdade esses dias e no exercicio tinha uma comparaçao de strings com == e vi que funcionava, entao resolvi fazer uns testes e percebi que o java ta aceitando comparar strings com ==.
gostaria de saber de voces, desde quando isso funciona no java?
Acho q desde sempre, mas recomenda-se (não sei ao certo pq) utilizar o equals ao invés do ==
mauricioadl
entao, nao lembro se ja cheguei a testar isso antes, mas pelo q aprendi isso nao funciona prq string eh uma classe e sempre vai apontar pelo endereco de memoria e nao pelo valor dela.
alguem sabe explicar melhor?!?!?!
RafaelCassau
boa tarde mauricioadl então, o metodo que compara Strings é o “equals” escrito na classe Object que é a super classe do JAVA, como todos os objetos no JAVA são passados por referencia, ate onde eu conheço seria impossivel comparar duas strings com == que é o metodo HashCode também escrito na classe object, quando você tenta comparar 2 strings com “==” teoricamente não daria certo pois String no JAVA e imutavel e como não se compara o conteudo e sim o endereço de memoria, sempre seria diferente ex:
Stringnome1="JAVA";Stringnome2="JAVA";if(nome1==nome2){
System.out.Prinln("São iguais"); \\ 0x001 exemplo de referencia em memoria
}else{
System.out.Prinln("São diferentes"); \\0x002 exemplo de referencia em memoria
}
a saida sempre seria “São diferentes”;
obs: isso no JDK 1.6, na nova versão não posso dar certeza,
a unica maneira que consigo pensar de dar certo seria se você reescrevesse o metodo “hashCode”, faiz o teste ae é muito simples o proprio eclipse reescreve o “equals” e o “hascode”, e depois posta o resultado, espero ter ajudado!
mauricioadl
se vc testar esse codigo que vc passou vc vai ver que a saida será:
São iguais
agora prq ta funcionando eh oq eu queria saber? entende?
programadora
Oi!!!
Dá uma olhadinha nesse tópico…
Vlw
saoj
RafaelCassau:
boa tarde mauricioadl então, o metodo que compara Strings é o “equals” escrito na classe Object que é a super classe do JAVA, como todos os objetos no JAVA são passados por referencia, ate onde eu conheço seria impossivel comparar duas strings com == que é o metodo HashCode também escrito na classe object, quando você tenta comparar 2 strings com “==” teoricamente não daria certo pois String no JAVA e imutavel e como não se compara o conteudo e sim o endereço de memoria, sempre seria diferente ex:
Stringnome1="JAVA";Stringnome2="JAVA";if(nome1==nome2){
System.out.Prinln("São iguais"); \\ 0x001 exemplo de referencia em memoria
}else{
System.out.Prinln("São diferentes"); \\0x002 exemplo de referencia em memoria
}
a saida sempre seria “São diferentes”;
obs: isso no JDK 1.6, na nova versão não posso dar certeza,
a unica maneira que consigo pensar de dar certo seria se você reescrevesse o metodo “hashCode”, faiz o teste ae é muito simples o proprio eclipse reescreve o “equals” e o “hascode”, e depois posta o resultado, espero ter ajudado!
Não, não. Esse teu exemplo aí em cima vai sempre retornar são IGUAIS.
mauricioadl
entendi xitara!
obrigado!
acho q faltei nesse aula kkkkkkkkkkkk
como eu sempre digo:
“morrendo e aprendendo”.
programadora
Huahuah…
RafaelCassau
boa tarde a todos, também li o tópico, achei muito interessante, mais uma coisa que aprendi com o GUJ e com vcs, obrigado a todos e desculpem pela informação errada, é que pelas boas praticas de programação sempre se sobreescreve o “Equals” e o “HashCode” para futuras comparações e até então eu não sabia que o modo de criar uma String com ou sem “new” afetaria no endereço de memoria que referencia ambas as Strings, por fim, agradeço a todos que ajudaram!
t+