Integer

5 respostas
tinorberto

Estou com uma duvida, estou estudando wrapper, qual a diferença entre: Integer i = 10 e Integer i = new Integer(10)

Integer i = 10;
Integer i2 =10;
		
System.out.println(i ==i2);
System.out.println(i !=i2);
System.out.println(i.equals(i2));

//imprime true , false , true


Integer i = new Integer(10);
Integer i2 =new Integer(10);
		
System.out.println(i ==i2);
System.out.println(i !=i2);
System.out.println(i.equals(i2));

//imprime  false , true ,true

Obrigado…

5 Respostas

rmendes08

A diferença é que na forma :

Integer i = 10

ocorre o chamado auto-boxing, isso é, o compilador cria um objeto do tipo Integer automaticamente. O inverso também é válido:

int j = Integer.valueOf(20);

ou seja, um objeto Integer é convertido automaticamente para um primitivo int.

Ocorre que nos casos de auto-boxing o compilador otimiza o uso de objetos. Como objetos de wrapper classes são imutáveis, pode-se perfeitamente usar um único objeto para um único valor, e foi isso que o compilador fez. No seu caso, como tanto i e i2 devem referenciar um objeto Integer de valor 10, é usado um único objeto. Se eu não me engano, e é um teste interessante de se fazer, você obtém o mesmo efeito usando o método valueOf ao invés de usar o construtor, pois como você pode ver, ao usar explicitamente o construtor, você pode criar diversos objetos para o mesmo valor, o que é um desperdício de memória.

evertonsilvagomesjav

Tem a questao tb do range que o Integer usa pra criar um novo objeto, se vc fizer o teste disso por exemplo dará false:

Integer a = 128;
Integer b = 128;

System.out.println(a == b);
tinorberto

Olha essa…

int i =10;

int i2 =10;


metodo(i , i2);

}

void metodo(Integer i , Integer i2){
System.out.println(i == i2); 
}

Na comparação estamos comparando objetos do tipo Integer ou um primitivo int?

evertonsilvagomesjav

tinorberto:
Olha essa…

int i =10;

int i2 =10;


metodo(i , i2);

}

void metodo(Integer i , Integer i2){
System.out.println(i == i2); 
}

Na comparação estamos comparando objetos do tipo Integer ou um primitivo int?

Dentro do metodo estao sendo comparados objetos wrappers Integers, no caso se vc passar um numero entre 0 e 127 sera criado apenas um objeto Integer, onde se vc fizer esta comparaçao dará true.

el_loko

tinorberto:
Olha essa…

int i =10;

int i2 =10;


metodo(i , i2);

}

void metodo(Integer i , Integer i2){
System.out.println(i == i2); 
}

Na comparação estamos comparando objetos do tipo Integer ou um primitivo int?

Se vc está estudando pelo livro da Kathy Sierra, provavelmente deve ter passado lido sobre “ampliação”.
A partir do momento que vc faz:

public void metodo(Integer x){....;}
int i = 1;
metodo(i);

A classe Integer faz o auto-boxing, algo equivalente a:

Integer x = new Integer(1);

Ou seja, a variavel “x” neste momento representa um objecto, não um tipo primitivo.

Criado 20 de abril de 2010
Ultima resposta 22 de abr. de 2010
Respostas 5
Participantes 4