Comparar strings com == [RESOLVIDO]

Pessoal, boa tarde!

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 ==

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?!?!?!

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:

String nome1 = "JAVA";
String nome2 = "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!

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?

Oi!!!
Dá uma olhadinha nesse tópico…

Vlw

[quote=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:

String nome1 = "JAVA";
String nome2 = "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![/quote]

Não, não. Esse teu exemplo aí em cima vai sempre retornar são IGUAIS.

entendi xitara!

obrigado!

acho q faltei nesse aula kkkkkkkkkkkk

como eu sempre digo:

“morrendo e aprendendo”.

Huahuah…
:wink:

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+

Mesma coisa.

Integer.valueOf(3) == Integer.valueOf(3)

Mas não se empolgue:

Integer.valueOf(333) != Integer.valueOf(333)