Como usar o Equals?

como usar o Equals?
ex:

static int idadeDoAndre = 21;
static int idadeDaPiuPiuCachorra = 29;
public static void main(String[] args) {

if ((idadeDaPiuPiuCachorra.equals(idadeDoAndre))){
System.out.println(“wow”);
}
}

tem sentido esse exemplo? ele não compila…
abs,
André AS

1 curtida

Não pq idadedaPiuPiuCachorra é um int, vc usa equals para comparar objetos por exemplo:

[code]String nome1 = “everton”;
String nome2 = “joao”;

if(nome1.equals(nome2)){

// faz algo…

}[/code]

1 curtida

use o Wrapper Integer para usar o equals.

Os tipos primitivos se compara usando == a referencia não o objeto em si.

Tipos primitivos se deve comparar com == .
Se usa equals quando se compara tipos complexos como por exemplo, a comparacao de duas Strings:
ex

[quote]
String test = “valorx”;

if( “valorx”.equals( test) ) {
//faz alguma coisa
}

Na verdade == não é apenas para tipos primitivos, mas normalmente são usados mais para isso.

O == compara o conteúdo de variáveis, da forma que tipos primitivos guardam valores, tipos de objetos guardam endereços de memória dos objetos (referências).

[code]int a = 20;
int b = 20;
int c = a;

if (a == b) …; // verdadeiro
if (a == c) …; // verdadeiro
if (b == c) …; // verdadeiro

Integer a = new Integer(20);
Integer b = new Integer(20);
Integer c = a;

if (a == b) …; // falso, ambas referenciam objetos Integer distintos
if (a.equals(b)) …; // verdadeiro, os objetos são iguais
if (a == c) …; // verdadeiro
if (a.equals©) …; // verdadeiro
if (b == c) …; // falso
if (b.equals© …; // verdadeiro
[/code]

Em algum momento de sua vida pode ser que seja necessário verificar se duas variáveis fazem referência ao mesmo objeto, daí um == seria útil (apesar que nesses casos o equals também retornaria true).

2 curtidas

muito legal vcs são dez!!!

brigadu…
AS

[quote=andredecotia]como usar o Equals?
ex:

static int idadeDoAndre = 21;
static int idadeDaPiuPiuCachorra = 29;
public static void main(String[] args) {

if ((idadeDaPiuPiuCachorra.equals(idadeDoAndre))){
System.out.println(“wow”);
}
}

tem sentido esse exemplo? ele não compila…
[/quote]

Não. Primeiro vc tem que saber a diferença entre variáveis primitivas e de referencia
depois vc precisa entender como se comparam objetos em java

por favor vejam o meu exemplo:

static String nome1 = "everton";   
static String nome2 = "joao";   
  public static void main(String[] args) {
	

  if(nome1 == nome2){   

System.out.println(“ok1”);
}
else {
System.out.println(“ok2”);
}

neste caso tanto faz o == ou equals? pois testei com os dois e nas duas formas o programa funcionou… pq?
Abs,
AS
}

As Strings são objetos bem interessantes em Java, pois em partes são tratadas como tipos primitivos.

Ao fazer

String a = "abc"; String b = "abc";

Você não tem 2 objetos, mas sim 2 variáveis apontando pro mesmo objeto String (“abc”).

Pra forçar a criação de 2 objetos, você pode fazer isso:

String a = new String("abc"); String b = new String("abc");

neste caso sim pq vc ta criando um objeto com uma String literal, e como nao existe objeto String criado com o nome “everton” nao tem como ele buscar no pool de Strings e sendo assim retorna false.

Se vc fizer:

[code]String a = “everton”;
String b = “everton”;

if(a == b) // isso retornara true, pq foi criado um objeto String com uma literal como a variavel “b” esta sendo criado com a mesma literal que a variavel “a” ele busca “everton” no pool de Strings e nao cria um novo objeto String.[/code]

[quote=Trebloc]As Strings são objetos bem interessantes em Java, pois em partes são tratadas como tipos primitivos.

Ao fazer

String a = "abc"; String b = "abc";

Você não tem 2 objetos, mas sim 2 variáveis apontando pro mesmo objeto String (“abc”).

Pra forçar a criação de 2 objetos, você pode fazer isso:

String a = new String("abc"); String b = new String("abc");[/quote]

Nao tem essa de tipos primitivos o que tem é que existe um pool de Strings onde e guardado uma literal.

public class TesteEquals {

    static String nome1 = "everton";
    static String nome2 = "joao";

    public static void main(String[] args) {


        if (nome1 == nome2) {

            System.out.println("TRUE");
        } else {
            System.out.println("FALSE");
        }

    }
}

Cara, fiz o teste como você fez, só troquei os println para True ou False para melhor indicação, claro aqui deu FALSE!

E o Netbeans ainda avisa que deve ser usado o equals.

Da uma revisada, e quando for escrever um if ou else de teste, use palavras distintas, no seu caso vc usou ok1 e ok2, ai fica dificil identificar.

Abraço.

Ae desculpai, eu tinha esquecido de mudar o String nome2 para everton.

Realmente fica igual.

M3g4d3th,

Corrija essa palavra na última frase que você disse. xD

[quote=Trebloc]M3g4d3th,

Corrija essa palavra na última frase que você disse. xD[/quote]

HAHAHA Pronto, valeu pelo toque, não tinha percebido, e ficou comico hahaha

[quote=andredecotia]por favor vejam o meu exemplo:

static String nome1 = "everton";   
static String nome2 = "joao";   
  public static void main(String[] args) {
	

  if(nome1 == nome2){   

System.out.println(“ok1”);
}
else {
System.out.println(“ok2”);
}

neste caso tanto faz o == ou equals? pois testei com os dois e nas duas formas o programa funcionou… pq?
[/quote]

funcionar , funciona. Se vc quer com isso dizer que compila e roda. Contudo ele imprime “ok2” e não “ok1” que seria o que vc espera.
== compara o valor das variáveis, não os objetos. Objetos são diferentes o conteúdo das variáveis é diferente mas o inverso não é verdade.

Como regra : sempre que comparar objetos use equals. String é um objeto. Use equals.