while statement loop for español enhanced java loops if-statement autoboxing

java - statement - ¿Cómo puede ser "a<= b && b<= a && a!=B" verdadero?



if statement java (3)

Aquí está el código que tengo que averiguar cómo es posible. Tengo una pista, pero no sé cómo hacerlo. Creo que se trata de números negativos y positivos y tal vez los modificadores variables también. Soy un principiante, busqué la solución en todas partes pero no pude encontrar nada utilizable.

la pregunta es que: debe declarar e inicializar las dos variables. La condición if debe ser verdadera.

el código:

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

Aprecio que te tomes el tiempo.


Esto no es posible con tipos primitivos. Puedes lograrlo con enteros encuadrados:

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

Las comparaciones <= y >= usarán el valor 1 sin caja, mientras que != Comparará las referencias y tendrá éxito ya que son objetos diferentes.


Esto también funciona:

Integer a = 128, b = 128;

Esto no:

Integer a = 127, b = 127;

Auto-boxing a int es azúcar sintáctica para una llamada a Integer.valueOf(int) . Esta función usa un caché para valores menores que 128. Por lo tanto, la asignación de 128 no tiene un golpe de caché; crea una nueva instancia de Integer con cada operación de autoenlace, y a != b (comparación de referencia) es verdadera.

La asignación de 127 tiene un acierto de caché, y los objetos Integer resultantes son realmente la misma instancia de la caché. Entonces, la comparación de referencia a != b es falsa.


Otro caso raro para las variables de clase puede ser que otro subproceso podría cambiar los valores de b mientras se ejecuta la comparación.