java - statement - ¿Cómo puede ser "a<= b && b<= a && a!=B" verdadero?
if statement java (3)
Esta pregunta ya tiene una respuesta aquí:
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.