¿cómo declarar i y j para que sea un bucle infinito?


while( i <= j && i >= j && i != j) {}

¿Cómo declarar i y j para que sea un bucle infinito ?

// es una pregunta de entrevista que conocí.

Se trata de preguntar cuáles son las declaraciones de i y j, hacer que sea siempre cierto.

Y no puedo hacerlo declarando i y j como tipos numéricos. ¿Qué otros tipos pueden enfrentarlo ?

Author: Alan, 2011-11-05

3 answers

Integer i=new Integer(1000);
Integer j=new Integer(1000);

System.out.println((i<=j)+" "+(i>=j)+" "+(i!=j));

i y j se desvinculará automáticamente a ints para <= y >=, pero no para !=. i y j son instancias diferentes, pero tienen el mismo valor int. Es por eso que las tres comparaciones volverán verdaderas.

 38
Author: Piotr Praszmo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-11-04 20:59:19

Esto también funciona ("en mi máquina"):

Integer a = 128, b = 128;

Considerando que esto no funcionará:

Integer a = 127, b = 127;

Auto-boxing un int es azúcar sintáctico para una llamada a Integer.valueOf(int). Esta función utiliza una caché para valores de -128 a 127, inclusive. puede almacenar en caché otros valores, pero en mi caso, no lo hace.

Por lo tanto, la asignación de 128 no tiene una coincidencia de caché; crea una nueva instancia Integer con cada operación de auto-boxing, y la comparación de referencia a != b 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é. Por lo tanto, la comparación de referencia a != b es falsa.

Lo que realmente quiero señalar es tener cuidado con la comparación de referencia con el auto-boxeo. Un problema más probable del mundo real es que esperas que a == b sea cierto porque se les asignó el mismo valor (en caja automática), ejecutas algunas pruebas unitarias que confirman tu expectativa, y luego tu código falla "in the wild" cuando algún contador excede el límite superior de cache. ¡Momentos divertidos!

 3
Author: erickson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-05-26 11:36:20

Cualquier valor igual de ' i 'y' j ' revelará verdadero con la declaración dada, diga:

Integer i = new Integer(1);
Integer j = new Integer(1);

while( i <= j && i >= j && i != j) {}

La magia es con operador usado! En caso de != operator el compilador toma los operandos como objetos(incluyendo sus valores) mientras que en el caso de >= o

 -2
Author: Elias Hossain,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-11-20 09:17:12