28/03/2014, 09:15
|
| 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. |