diferença entre ==

6 respostas
C
queria saber a diferença entre esse codigo.

entre

Integer x =10;

Integer x2 =10;

System.out.println(x==x2); aqui saida true
e

Integer x3= new Integer(10);

Integer x4 = new Integer(10);

System.out.println(x3==x3); aqui saida false

se poder deixar uma explicação …

6 Respostas

andrerios

Kra é o seguinte utilizando int vc está trabalhando com primitivos do Java ou seja é o numero em si entao vc pode comparar com == q funciona. Agora utilizando Integer vc está trabalhando com um Objeto entao vc deve comparar utilizando o metodo equals() q este objeto possui.

x3.equals(x4);

ai sim ele vai retornar true, pois ele compara os valores atribuidos ao objeto ao invez de ocmparar a referencia de memoria.

ajudei ou confundi mais?

abraco!

C

andrerios

fico grato com sua resposta .
eu não tenho duvida em usar o equals para comparar wrapper.
sei q vai funcionar perfeitamente se objects for do memso tipo e valor iqual. vai retornar true .

  • estou trabalhando com wrapper.
  • quero saber a diferença entre esses codigo .
    pq acho q deveria imprimir false false .
    pq estamos comparando objects diferentes .
Foxlol

O operador de igualdade (==) quanto utilizado em objetos verifica a referência dos mesmos, diferente de qnd utilizado com tipos primitivos.

No primeiro caso como vc naum usou o operador NEW, a JVM jogou os valores de x e x2 em um Pool(para melhorar a performance).

Jah no segundo caso vc utilizou NEW entaum vc disse a JVM que realmente criasse dois objetos distintos na heap(área de memória onde residem os objetos). Sendo assim naum possuem a mesma referência.

ziegfried

Usando o operador “new” em Wrappers, um novo objeto é carregado na memória (como o amigo de cima falou). Já utilizando uma atribuição simples (Integer x = 1), a JVM verifica se já existe o mesmo valor no pool do respectivo Wrapper (no caso, Integer), aumentando a performance.

Sami_Koivu

Complementando mais um pouquinho:

Quando você usa o recurso autoboxing (setando um valor primitivo ao tipo wrapper) você está implicitamente usando o método valueOf da classe Integer.

Ou seja,

Integer x =10;

é equivalente de

Integer x = Integer.valueOf(10);

E por motivos de desempenho, como criar objetos chega a ser uma operação "caro" em termos de desempenho quando muitos objetos estão sendo criados, as classes wrapper utilizam esquemas para evitar criação de novos objetos.

Veja por exemplo o método valueOf(int) da classe Integer:

public static Integer valueOf(int i) {
	final int offset = 128;
	if (i &gt= -128 && i &lt= 127) { // must cache 
	    return IntegerCache.cache[i + offset];
	}
        return new Integer(i);
    }

Agora, se você fizer o teste com um valor que está fora esse range (-128 =&gt 127) vai ver que o resultado será diferente.

[]s,
Sami

LPJava

é como a galera falou ai, você quando dar um new cria um novo objeto, mais ai no seu caso vc criou um objeto com o mesmo valor do outro, porem é outro objeto, em algum local da memoria. E nao tem nada ver com aquele primeiro que você criou por isso que retorna falso.
Imagine: “Você queria que alguém, falasse para outra pessoa que você é fulano, só por que está usando a mesma camisa?” Claro que não, a mesma coisa é ai, só pq um objeto tem o mesmo valor que outro objeto nao quer dizer que ele sao iguais = true.

Criado 12 de agosto de 2007
Ultima resposta 13 de ago. de 2007
Respostas 6
Participantes 6