Equals?

16 respostas
A

Oq significa esse comando ?qual a função ?

16 Respostas

L

Serve para comparar dois objetos já que a comparação com “==” compara os endereços de memória.
Faça uma pesquisa no fórum que irá encontrar muita referência a respeito.

flw

maquiavelbona

Esse método é da classe Object, da qual todos as outras classes herdam. O método equals(Object obj) compara dois objetos de acordo com um critério e retorna true caso iguais, false caso diferentes. Intuitivo, não?

Até!
Dica: PROCURE! Quando não encontrar, procure um pouco mais. Se mesmo assim não achar, continue procurando. Esse tipo de pergunta está facilmente explicada no JavaDoc. Além disso, a Mata das Araucárias agradece.

L

Ex:
compararando duas strings.

String teste1 = “igual”;
String teste2 = “igual”;

teste1.equals(teste2);

T

por exemplo eu tenho 2 objetos.

Integer i1 = 1000; Integer i2 = 1000; if(i1 == i2){ System.out.println("Iguais"); } if(i1.equals(i2)){ System.out.println("Iguais"); }

mais mais se o seu Objeto for

[list]List[/list]
[list]Character[/list]
[list]Short de -128 a 127[/list]
[list]Boolean[/list]
[list]Integer de -128 a 127[/list]

vc pode comparar com ==

Integer i1 = 100; Integer i2 = 100; if(i1 == i2){ System.out.println("Iguais"); } if(i1.equals(i2)){ System.out.println("Iguais"); }

Espero ter Ajudado!

A

Entendi amigo, mas me explique uma coisa, (sou iniciante em java) String e tipos primitivos em java são objetos tb ?

R

Alguém poderia dar um exemplo onde a comparação com o operador “==” devolve um resultado diferente
do “Equals()”?

Obrigado =)

sergiotaborda

Strings são objetos. Tipos primitivos não são objetos (por isso se chamam primitivos, no sentido que objetos são tipos evoluidos)

Existem objetos que correspondem com os tipos primitivos. Esses objetos são chamados de Wrappers ( literalmente: que embrulham). Por exemplo o tipo primitivo int tem o wrapper Integer.

O Java tem a capacidade automática de alternar entre int e Integer e vice-versa. A isso se chama auto-boxing e é uma capacidade adicionada ao java a partir da versão 5.

sergiotaborda

Rojas:
Alguém poderia dar um exemplo onde a comparação com o operador “==” devolve um resultado diferente
do “Equals()”?

Obrigado =)

Integer a = new Integer (2);
Integer b = new Integer (2);

a==b  -> false (a e b são veriáveis em diferentes endeços de memoria)
a.equals(b) -> true (a e b têm o mesmo valor)
maquiavelbona

Er… isso não procede. O “==” compara referências, fora do heap. O método equals() compara dois objetos dentro do heap de acordo com um critério específico.
Quando fazes assim:

int i =10; int z = 10; if(i ==z){ System.out.println("Iguais"); }else{ System.out.println("Diferentes"); }
Ele compara duas variáveis primitivas, que sempre estão fora do heap, por isso o “==” funciona bem.
Usando “==” para objetos, ele compara as referências.
No caso:

Integer i = 100; Integer z = 100; if(i ==z){ System.out.println("Iguais"); }else{ System.out.println("Diferentes"); }
Vai retornar iguais. Porque? Procure por Integer Pool. No caso de String, também ocorre isso pelo mesmo motivo. Ambas as variáveis de referência ( i e z, que são variáveis e não objetos, que só apontam onde está o objeto) apontam para o mesmo objeto dentro do heap. Mas isso nem sempre ocorre, visto que podem ser atribuídos objetos diferentes com o mesmo valor.
Como ocorre:
-Variável i recebe o objeto Integer(100), recém criado;
-Variável z receberia outro objeto Integer(100), mas como já foi criado um, ela só recebe a mesma referência;

No caso:

Integer i = 100; Integer z = new Integer(100); if(i ==z){ System.out.println("Iguais"); }else{ System.out.println("Diferentes"); }
Vai retornar false. Porque? Pois as variáveis i e z apontam para objetos diferentes, dentro do heap. Como?
-Variável i recebe o objeto Integer(100), recém criado;
-Variável z recebe outro objeto Integer(100), por causa da explícita criação de outro objeto em new Integer(100);

O método equals() compara objetos e não referências, de acordo com um critério. Por isso que para comparar conteúdos, o equals() é recomendado.
Tente fazer os exemplos anteriores com:

if(i.equals(z))

no lugar do :

if(i==z)

E vais ver que SEMPRE vai retornar verdadeiro. Conteúdos são comparados, não referências.

A apostila da Caelum do FJ-11 ajuda um bocado nisso.

Até!

T

Tipos primitivos não são objetos elas nada mais nada menos são espaços reservados na memória, o que eu fiz ali foi fazer um Wrapper. Wrapper nada mais é do uma classe para um determinado tipo primitivo como por Exemplo:

int - primitivo
Integer - Objeto

Tipos Primitivos

boolean
        int
        byte
        char
        long
        short
        double
        float

em determinadas situações é necessário vc ter um primitivo e um objeto, por isso foi criado essas classe Wrapper, as classe wrapper para cada primitivo são as seguintes.

Boolean
        Integer
        Byte
        Character
        Long
        Short
        Double
        Float

espero ter ajudado, pessoal se eu falei alguma besteira por favor me corrigir!

Abraços!

A

:D

sergiotaborda:
Ademir Franco:
Entendi amigo, mas me explique uma coisa, (sou iniciante em java) String e tipos primitivos em java são objetos tb ?

Strings são objetos. Tipos primitivos não são objetos (por isso se chamam primitivos, no sentido que objetos são tipos evoluidos)

Existem objetos que correspondem com os tipos primitivos. Esses objetos são chamados de Wrappers ( literalmente: que embrulham). Por exemplo o tipo primitivo int tem o wrapper Integer.

O Java tem a capacidade automática de alternar entre int e Integer e vice-versa. A isso se chama auto-boxing e é uma capacidade adicionada ao java a partir da versão 5.

Ok. :smiley:

GiancarloBraga

Grandeee maquiavelbona.
Finalmente alguém conseguiu esclarecer direito essa história .

Então só resumindo:
O == vai comparar sempre as referências. Já o equals comparará os valores. Apesar que em diversos casos, o uso do == já basta.

Obrigado.

A

Tipos primitivos não são objetos elas nada mais nada menos são espaços reservados na memória, o que eu fiz ali foi fazer um Wrapper. Wrapper nada mais é do uma classe para um determinado tipo primitivo como por Exemplo:

int - primitivo
Integer - Objeto

Tipos Primitivos

boolean
        int
        byte
        char
        long
        short
        double
        float

em determinadas situações é necessário vc ter um primitivo e um objeto, por isso foi criado essas classe Wrapper, as classe wrapper para cada primitivo são as seguintes.

Boolean
        Integer
        Byte
        Character
        Long
        Short
        Double
        Float

espero ter ajudado, pessoal se eu falei alguma besteira por favor me corrigir!

Abraços!

Estou estudando pelo livro USE A CABEÇA!JAVA estou no capitulo 7, já passei pelo capitulo das variaveis e ele n me disse nada sobre String, mas agora ta blz.

T

Também estou estudando, as vezes posso vacilar também!

o bom do GUJ, que tem um pessoal que manja muito e tem humildade para ajudar! :wink:

Abraços!

maquiavelbona

Se for ser preciosista:

  • “==” compara variáveis, de referência ou de valor, SEMPRE fora do heap;
  • equals() compara objetos, de acordo com um critério adverso, SEMPRE dentro do heap. Pode ser usado “==” por baixo dos panos, exemplo: IdentityHashMap;

Até!

A

Se for ser preciosista:

  • “==” compara variáveis, de referência ou de valor, SEMPRE fora do heap;
  • equals() compara objetos, de acordo com um critério adverso, SEMPRE dentro do heap. Pode ser usado “==” por baixo dos panos, exemplo: IdentityHashMap;

Até!

Ok.

Criado 31 de agosto de 2007
Ultima resposta 31 de ago. de 2007
Respostas 16
Participantes 8