Ver Mensaje Individual
  #4 (permalink)  
Antiguo 28/03/2014, 09:15
Avatar de chuidiang
chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 20 años, 3 meses
Puntos: 454
Respuesta: ahora no entiendo == equals

Hola:

con "inmediatamente" quiero decir una forma en que el compilador sea capaz de saber automaticamente el resultado, para poder optimizar, no me refiero a que vayan seguidas. El concepto es el que tenias, equals() para saber si son objetos iguales, == para saber si ocupan la misma memoria. La optimización del compilador puede hacer que == de true cuando aparentemente no debería darlo, pero sí es true porque el compilador se ha encargado de que esos objetos usen la misma memoria.

En cuanto a la segunda pregunta, el compilador de java sabe convertir automáticamente entre int e Integer (y entre float y Float, double y Double, etc). Si comparas con == un int con un Integer, el compilador convertira uno de los tipos al otro automáticamente para hacer la comparación y por el mismo motivo de antes, te dará true.

Estoy de acuerdo contigo en que un momento dado puede resultar confuso. Esta conversión automática se ha hecho para facilitar la vida al programador de forma que no tenga que crear explicitamente un Integer y pueda simplemente poner un valor o un int. Sin estas conversión automática, líneas como esta que pusiste en tu primer ejemplo

Integer n1 = 47;

simplemente no debería compilar y la única opción válida sería

Integer n1 = new Integer(47);

que es más engorrosa.


Se bueno.
__________________
Apuntes Java
Wiki de Programación