java - descargar - ¿Cómo hacer un bucle infinito con “x<= y && x>=y && x!=Y”?
java offline (4)
Aquí está.
Integer x =1;
Integer y = new Integer(1);
while(x <= y&& x >= y && x != y) {
System.out.println("Success");
}
Tuve esta pregunta de entrevista hace algunos años pero todavía no he encontrado la respuesta.
¿Qué deben ser x e y para hacer un bucle infinito?
while (x <= y&& x >= y && x != y) {
}
Lo intentamos con Nan
, infinity+/-
, null
float
vs int
.
Necesita dos variables que sean comparables, tengan el mismo valor, pero representen diferentes instancias, por ejemplo:
Integer x = new Integer(0);
Integer y = new Integer(0);
x <= y
y y <= x
son verdaderas porque el Integer
está en la caja, sin embargo, la igualdad de instancia x == y
es falsa.
Tenga en cuenta que también funciona con Float
, Long
y Double
, y que cualquier valor (no solo 0) funciona.
También puedes jugar con las complejidades de tu JVM, ya que generalmente almacenan en caché un entero de hasta 127, por lo que esto también funcionaría:
Integer x = 128;
Integer y = 128;
(pero no lo haría con 127).
O más simplemente, ya que los Double
s generalmente no están en caché:
Double x = 0d;
Double y = 0d;
Tienes tu respuesta, solo quería decir cómo llegué a la misma. En el mundo normal, tal prueba sería inútil, no hay manera de que dos números funcionen así. Eso significa que tiene que ser algo específico de Java.
xey pueden ser tipos simples, lo que lo hace imposible de inmediato.
xey pueden ser objetos. Pero, ¿qué objetos se comparan con <= o> =? Sólo números "en caja". Por lo tanto, la respuesta surge muy rápido.
tienes que crear dos objetos enteros, por ejemplo:
Integer x = new Integer(2);
Integer y = new Integer(2);
Como x
e y
son objetos y no tipos ordinales, obtienes un bucle infinito.