Al comparar 2 variables de tipo
Integer no importa si ocupan el mismo espacio de memoria. Existen un tipo de clases que lo que hacen es enmascarar un dato de tipo primitivo, se llaman Wrapper classes. Lo que hace el compilador con estas clases es convertir una variable
Integer en
int o viceversa. Por ejemplo puedes comparar una variable
int con una variable
Integer y el resultado es el esperado al utilizar == (se compara el valor numerico, no su posicion en memoria)
Este proceso se llama autoboxing y unboxing
http://docs.oracle.com/javase/tutori...utoboxing.html
Un compilador no podria optimizar un codigo en donde el valor de la variable se pida al usuario (es imposible que el compilador sepa que valor escribira el usuario). Con este codigo se obtiene el mismo resultado que tu obtienes en tu codigo, pero aqui uno de los valores se pide al usuario
Código Java:
Ver originalimport java.util.Scanner;
public class Prueba {
public static void main
(String []args
) { int entero1 = 50;
System.
out.
println("entero1 == entero2: " + (entero1
==entero2
)); //se comparan variables de diferente tipo
Scanner in
= new Scanner
(System.
in); int entero3 = in.nextInt();
System.
out.
println("entero2 == entero3: " + (entero2
==entero3
)); }
}