Com a introdução do autoboxing na versão 1.5 do Java, a utilização de primitivas começou a cair em desuso, ao ponto de até já haver quem se pergunte se se deve continuar a referir este tipo de variável no ensino do Java (http://www.evolutionnext.com/blog/2004/07/03/1088886468000.html).
Sem duvida que o autoboxing trouxe muitas vantagens a quem escreve código, entre elas, permitir a utilização de primitivas como chaves ou valores nas Collections, mas por outro lado também permite fazer coisas menos bonitas como usar Integer
s como índices nos ciclos for
.
Talvez devido ao facto da sua introdução na linguagem ser relativamente recente, os Wrappers correspondentes a cada uma dos tipos primitivos (Integer, Boolean, Double, etc) nem sempre são usados da forma mais correcta, como é caso dos dois exemplos seguintes que tenho encontrado de forma recorrente em código que revejo:
1 – utilizar ==
para comparar referências de Wrappers
Depois do compilador converter a primitiva para o Wrapper correspondente, esta passa a ser um objecto e como tal, sujeito às mesmas regras, ou seja, a comparação da igualdade deve ser feita invocando o método .equals()
numa referencia válida de um dos Wrappers e não usando o operador ==
.
Passemos então ao exemplo:
public class Equalities { public static void main(String[] args) { Integer i = 150;Integer j = 150; System.out.println(i==j); // false System.out.println(i.equals(j)); //true } }
A comparação de valores usando o operador ==
falha enquanto que a utilização do método .equals()
devolve o resultado esperado. É realmente discutível se o operador ==
deveria ou não ser 'overloaded' para os Wrappers, como já acontece para as String, mas i
ersion Survey Site: Converts 1 In 7'>Best Conversion Survey Site: Converts 1 In 7