2011-08-02 2 views
0

Possible en double:
Wrapper class and == operatorPromotion numérique et égalité?

J'ai un puzzle de mon ami. Voici le résultat:

public class Test{ 
    public static void main(String[] args){ 
     Integer i = 1000; //10 
     Integer y = 1000; //10  
     System.out.println(i == y); 
    } 
} 

Le résultat sera FALSE. C'est vrai. Mais en remplaçant la valeur i, y par 10, le résultat est VRAI. D'après ce que j'ai lu, lorsque l'opérateur == est appliqué aux variables de référence, il va tester si elles se réfèrent au même objet. Je ne sais pas pourquoi les résultats comme ça, mais je suppose que le problème de la promotion numérique. J'ai vraiment besoin d'aide. Remerciez tout le monde.

Répondre

2

Il n'y a rien promu, puisque 10 et 1000, en tant que littéraux numériques, sont de type int.

Mais il existe un pool de valeurs pour les petits objets Integer, similaire au stringpool, car la plupart des valeurs sont petites ou de petites valeurs sont utilisées plus souvent. Mais pour limiter la taille du pool, il ne couvre que certaines valeurs comprises entre -128 et 127.

En règle générale: Pour les objets, comparez-les toujours avec des équations, seuls les types élémentaires avec ==.

+0

Merci. Je me souviens de cette affaire. –