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?
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.
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=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.
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+