Comparação

4 respostas
M

Olá pessoal.

Para compara 2 variáveis do tipo Long pode ser feito da maneira abaixo?

Long valor1 = 20596L;
Long valor2 = 20596L;

if(valor1 == valor2){
	System.out.println("Os valores 1 e 2 são iguais");
}

4 Respostas

drsmachado

Sim, pode.
Agora, se você quer saber se o conteúdo das 2 é o mesmo, por elas serem Objects, você deve usar o método equals.

fabiocsilva

Para tipos Integer, essa comparação retorna true para valores no intervalo de -128 a 127, depois vira false. A verdade é que a JVM faz um “pool” de inteiros da mesma forma que o tipo String, porém o pool de inteiros não só é bastante limitado como é configurável na JVM, sendo portanto dependente do ambiente de execução.
Não tenho certeza mas o tipo Long deve seguir o mesmo comportamento, o que torna a comparação utilizando == perigosa.

M

Me falaram que por ser Java 5 o Autobox já resolve estas situações.

E

MPSV:

Para comparar 2 variáveis do tipo Long pode ser feito da maneira abaixo?

Long valor1 = 20596L; Long valor2 = 20596L; if(valor1 == valor2){

A rigor não (basta ver que vai dar o resultado incorreto); use:

if ((long) valor1 == (long) valor2)

Isso porque “==”, com objetos, compara suas referências, não seus valores.
O “autoboxing” chama o método Long.valueOf, que tem um comportamento um pouco bizarro.
É que ele normalmente é equivalente a “new Long”, exceto quando o valor está entre -128L e +127L; nesse caso, o valueOf vai catar um “Long” já prefabricado pela classe java.lang.Long, que está em um vetor de 256 posições. É melhor não usar diretamente o “==” se você não vai comparar com null.

Criado 10 de junho de 2011
Ultima resposta 10 de jun. de 2011
Respostas 4
Participantes 4