Equals ou ==?

16 respostas
P

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

16 Respostas

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.

P

“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.

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…

leomc

e qual a sua dúvida agora?

P

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

dsiviotti

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.

V

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

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

Hempx

“Ping”:
“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.

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…

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

P

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

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

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…

dsiviotti

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.

Hempx

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

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

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…

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

Grinvon

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();
    }
    
}
cv1

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.

Grinvon

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

caiofilipini

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

Bani

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

A

== :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)
Criado 23 de março de 2004
Ultima resposta 25 de jun. de 2008
Respostas 16
Participantes 10