104 votos

¿Por qué hace (< = j && j < = i && i! = j) se evalúan como TRUE?

He escrito una pieza de código Java que se ejecuta en un bucle infinito.

A continuación está el código:

public class TestProgram {
    public static void main(String[] args){
        Integer i = new Integer(0);
        Integer j = new Integer(0);

        while(i<=j && j<=i && i!=j){
            System.out.println(i);
        }
    }
}

En el código anterior, mientras que ver la condición en la while lazo, al principio parece que ese programa no irá dentro de la while lazo. Pero en realidad es un bucle infinito y mantiene el valor de la impresión.

¿Qué está pasando aquí?

188voto

Juned Ahsan Puntos 33217
  • i <= j se evalúa true, porque auto unboxing pasa por int comparaciones y, a continuación, ambos i y j mantenga el valor predeterminado, 0.

  • j <= i se evalúa true debido a la razón anterior.

  • i != j se evalúa true, debido a que tanto i y json diferentes objetos. Y si bien la comparación de objetos, no hay ninguna necesidad de auto unboxing.

Se cumplen todas las condiciones, y no va a cambiar i y j en bucle, por lo que se está ejecutando infinitamente.

40voto

Ashwin Puntos 2011

Porque está comparando

  • 0 < = 0 (true) // unboxing

  • 0 > = 0 (true) // unboxing

  • reference != secondReference (true)como crear objetos, no una comparación primitivo. Así se evalúa como while(true) { // Never ending loop } .

17voto

Colonel Panic Puntos 1237

Los objetos enteros son diferentes. Es diferente del tipo básico int.

Ver esta respuesta: auto-unboxing ocurre cuando se comparan dos números enteros en Java?

El i != j parte es cierto, que estabas esperando ser falsos.

1voto

Silviu Burcea Puntos 2065

El bucle no se acaba porque su condición es verdadera (i! = j es cierto porque hay 2 objetos diferentes, utilice en su lugar Integer.valueOf) y dentro del bucle los valores no están cambiando así su condición sigue siendo válido para siempre.

1voto

Krichevskoy Puntos 159

Los objetos enteros son diferentes. Es diferente del tipo básico int. Así que puedes hacer así. lo qué ha comparar el objeto y por supuesto el resultado es true.

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X