53 votes

Comment est-il possible que "a <= b && b <= a && a != b" soit vrai?

Voici le code que j'ai pour essayer de comprendre comment c'est possible. J'ai une idée mais je ne sais pas comment faire. Je pense que c'est lié aux nombres négatifs et positifs et peut-être aussi aux modificateurs de variables. Je suis débutant, j'ai cherché la solution partout mais je n'ai rien trouvé d'utile.

La question est la suivante: Vous devez déclarer et initialiser les deux variables. La condition if doit être vraie.

le code :

if( a <= b && b <= a && a!=b){
       System.out.println("anything...");
}

Je vous remercie de prendre le temps.

97voto

Henry Points 14061

Ce n'est pas possible avec les types primitifs. Vous pouvez le réaliser avec des Integers encapsulés:

Integer a = new Integer(1);
Integer b = new Integer(1);

Les comparaisons <= et >= utiliseront la valeur déballée 1, tandis que le != comparera les références et réussira car ce sont des objets différents.

20voto

erickson Points 127945

Cela fonctionne aussi :

Integer a = 128, b = 128;

Cela ne fonctionne pas :

Integer a = 127, b = 127;

L'autoboxing d'un int est du sucre syntaxique pour un appel à Integer.valueOf(int). Cette fonction utilise un cache pour les valeurs inférieures à 128. Ainsi, l'assignation de 128 n'a pas de hit en cache ; elle crée une nouvelle instance de Integer à chaque opération d'autoboxing, et a != b (comparaison de références) est true.

L'assignation de 127 a un hit en cache, et les objets Integer résultants sont vraiment la même instance du cache. Ainsi, la comparaison de références a != b est false.

13voto

Peter Rader Points 3995

Un autre cas rare pour les variables de classe pourrait être qu'un autre thread pourrait changer les valeurs de a et b pendant que la comparaison s'exécute.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X