Equals ou ==?

Eu não entendi quando devo usar == ou quando devo usar equals()?

tá falando sério? com mais de 100 mensagens, várias no java avançado…
bom

façaa

String a = “Brasil”;
String b = “Brasil”;

depois faça

if (a == b) e veja o resultado.
== é para tipos primitivos apenas. String em java é objeto
o == pode até funcionar, mas sér apenas sorte sua.

[quote=“leomc”]tá falando sério? com mais de 100 mensagens, várias no java avançado…
bom

façaa

String a = “Brasil”;
String b = “Brasil”;

depois faça

if (a == b) e veja o resultado.
== é para tipos primitivos apenas. String em java é objeto
o == pode até funcionar, mas sér apenas sorte sua.[/quote]

Ainda não entendi muito bem, eu li agora em um lugar aki que usamos == para comparar de dois primitivos apontam para o mesmo objeto e o equals() usamos para saber se o conteúdo de dois objetos forem iguais…

e qual a sua dúvida agora?

Na moral, eu ainda não consigo ver diferença entre os dois, se eu fizesse a prova do exame agora eu me borava todo nessa parte

a == b compara se a e b apontam para mesma área de memória, se o conteúdo de ambos for “abc” e, no entanto, forem pontos diferentes de memória não será igual.

a.equals(b) compara o conteúdo de a com o conteúdo de b, se ambas forem “abc” será igual.

Na moral, eu ainda não consigo ver diferença entre os dois, se eu fizesse a prova do exame agora eu me borava todo nessa parte[/quote]

Ir fazer a prova sem saber isso é dose hein! Compra um livro e estuda! :wink:

[quote=“Ping”][quote=“leomc”]tá falando sério? com mais de 100 mensagens, várias no java avançado…
bom

façaa

String a = “Brasil”;
String b = “Brasil”;

depois faça

if (a == b) e veja o resultado.
== é para tipos primitivos apenas. String em java é objeto
o == pode até funcionar, mas sér apenas sorte sua.[/quote]

Ainda não entendi muito bem, eu li agora em um lugar aki que usamos == para comparar de dois primitivos apontam para o mesmo objeto e o equals() usamos para saber se o conteúdo de dois objetos forem iguais…[/quote]

heheh… vc sabe a resposta a tá com duvida…
essa eh no minimo engraçada… :lol:

Na moral, eu ainda não consigo ver diferença entre os dois, se eu fizesse a prova do exame agora eu me borava todo nessa parte[/quote]

Ir fazer a prova sem saber isso é dose hein! Compra um livro e estuda! :wink:[/quote]

Eu acho que é final do dia e eu já não estou conseguindo raciocinar direito, não consegui entender essa história de apontar para a mesma área de memória, então seria melhor usar equals() sempre…

No caso de Strings às vezes a == b é o mesmo que a.equals(b) por economia de memória, mas o certo é usar a.equals(a). Com Strings passadas como parâmetro acho que isso não funciona.

Na moral, eu ainda não consigo ver diferença entre os dois, se eu fizesse a prova do exame agora eu me borava todo nessa parte[/quote]

Ir fazer a prova sem saber isso é dose hein! Compra um livro e estuda! :wink:[/quote]

Eu acho que é final do dia e eu já não estou conseguindo raciocinar direito, não consegui entender essa história de apontar para a mesma área de memória, então seria melhor usar equals() sempre…[/quote]

hehe… pelo jeito tá lesado ainda…
mas depende… se quer olha conteudo sim… se quer ver se duas referencias aponta pro msm objeto use == … agora caso esteja usando tipos primitivos… ai se vc só pode usar ==

Veja assim:

“==” compara objetos
"equals" compara valores (conteúdo)

EX:

String a = “abc”;
String b =a;
String c = new String();

c = a;

‘a’ é igual a ‘b’, ou seja, aponta para o mesmo local na memória.
‘c’ != ‘b’ e ‘a’, porém ter o mesmo valor das demais variáveis.


public class Excompara {
String a = "abc";
String b =a;
String c = new String();
    
    public Excompara() {
        c=a;
        
     System.out.println("'a' e 'b' sao o mesmo objeto? "+a==b);
     System.out.println("'a' e 'b' tem o mesmo valor? "+a.equals(b));
     System.out.println("'a' e 'c' sao o mesmo objeto? "+a==c);
     System.out.println("'a' e 'c' tem o mesmo valor? "+c.equals(a)); 
    }
    
    public static void main(String[] args) {
        new Excompara();
    }
    
}

Explicar equals versus == usando Strings como exemplo eh uma pessima ideia, por causa do mecanismo de intern()'ing da VM, desenvolvido pra dar uma aumentada na performance e diminuir o consumo de memoria.

Como assim cv? Gostaria de saber mais, por que causa essa latência? :lol:

http://java.sun.com/j2se/1.4.2/docs/api/java/lang/String.html#intern()

ou http://www.guj.com.br/user.article.get.chain?page=1&article.id=103

== :Verifica se duas variaveis de referencia está referenciando o Mesmo Objeto no Heap…se refrerenciar retorna true. quando utilizada em primitivos,verifica se as variaveis sao do mesmo tipo e se contem os mesmos valores…
Sao consideradas iguais por economia de memoria se seus valores primitivos forem os mesmos:
:idea: Boolean
:idea: Byte
:idea: Character
:idea: Short e Interger de -128 até 127
se os inteiros passarem desse intervalo de valores…serao consigerados diferente por ==

equals() :Verifica se duas variaveis estao referenciando objetos que tem os memsos valores…no heap

public static void main(String[] args) {
String s=new String(“abc”); //um objeto com valor "abc"
String b=new String(“abc”); //outro objeto com valor "abc"
String ss=“abc”; //outro objeto com valor “abc” …porem diferente do criado anterior…
String bb=“abc”; //outro objeto com valor “abc” …porem igual ao anterior…
String c=s;// apontando “c” para o objeto que “s” aponta…
if(s==b){ //‘s’ e ‘b’ apesar dos mesmos valores…sao objetos diferentes no heap…retorna false
System.out.println(“s == b”);
}
if(s.equals(b)){ //‘s’ e ‘b’ apesar de ser objetos diferentes contem o mesmo valor
System.out.println(“s.equal(b)”);

    	 }
     if(ss==bb){  // 'ss' e 'bb' está apontando para o mesmo objeto no heap e contem os mesmo valores..retorna true
     	   System.out.println("ss == bb");
       }
       if(ss.equals(bb)){
      		 System.out.println("ss.equal(bb)");//retorna true..tambem
      		 
      	 }
       if(c==s){  //como 'c' esta recebendo a referencia de 's' que aponta para o objeto string..entao sao iguais..retorna true..
    	   System.out.println("c == s");
       }
       if(c.equals(s)){
      		 System.out.println("c.equal(s)");//true
      		 
      	 }}}

resultado:

s.equal(b)
ss == bb
ss.equal(bb)
c == s
c.equal(s)