Olá pessoal.
Para compara 2 variáveis do tipo Long pode ser feito da maneira abaixo?
[code]Long valor1 = 20596L;
Long valor2 = 20596L;
if(valor1 == valor2){
System.out.println(“Os valores 1 e 2 são iguais”);
}[/code]
Olá pessoal.
Para compara 2 variáveis do tipo Long pode ser feito da maneira abaixo?
[code]Long valor1 = 20596L;
Long valor2 = 20596L;
if(valor1 == valor2){
System.out.println(“Os valores 1 e 2 são iguais”);
}[/code]
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.
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.
Me falaram que por ser Java 5 o Autobox já resolve estas situações.
[quote=MPSV]
Para comparar 2 variáveis do tipo Long pode ser feito da maneira abaixo?
Long valor1 = 20596L;
Long valor2 = 20596L;
if(valor1 == valor2){
[/quote]
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.