Tengo enteros que se supone que son iguales (y lo verifico por salida). Pero en mi condición if
, Java no considera que estas variables tengan el mismo valor.¿Por qué Java no ve que los enteros son iguales?
tengo el siguiente código:
if (pay[0]==point[0] && pay[1]==point[1]) {
game.log.fine(">>>>>> the same");
} else {
game.log.fine(">>>>>> different");
}
game.log.fine("Compare:" + pay[0] + "," + pay[1] + " -> " + point[0] + "," + point[1]);
Y producir el siguiente resultado:
FINE: >>>>>> different
FINE: Compare:: 60,145 -> 60,145
Probablemente tengo que añadir que point
se define así:
Integer[] point = new Integer[2];
y pay
nosotros tomados del constructor de bucles:
for (Integer[] pay : payoffs2exchanges.keySet())
Por lo tanto, estas dos variables tienen tanto el tipo entero.
si tienes una mente abierta, entonces es posible que te guste mi explicación ... Es porque los creadores de Java realmente se equivocaron cuando decidieron hacer las clases contenedoras, que tienen un rendimiento realmente patético (no tienes idea sobre el desperdicio generado al envolver un * int * dentro de un * Entero *). Lo hicieron principalmente porque no pudieron diseñar algo limpio y eficiente como, por ejemplo, * Trove * 's * TLongIntHashMap *. Por supuesto, espere comentarios vertiginosos de la gente que bebió Java-aid explicando cómo estoy equivocado y cómo las clases de envoltura son una bendición del cielo;) – SyntaxT3rr0r
por cierto, nunca haga un * nuevo Entero [2] * porque fuerza el creación de un nuevo objeto ** IFF ** sigues usando clases contenedoras como * Integer * (que realmente no deberías, pero ese es otro tema), quieres hacer un * Integer.valueOf (2) * (por cierto que luego uno ** garantiza ** según las especificaciones de Java, la reutilización de los primeros 256 objetos Integer de -128 a 127, pero ese no es un brainfart de Java muy conocido). – SyntaxT3rr0r
SpoonBender: ¿Qué pasa con la decisión de los creadores de Java * de * permitir la sobrecarga del operador para las cadenas? De esa forma 'Integer.valueOf (127) == Integer.valueOf (127)' pero 'Integer.valueOf (128)! = Integer.valueOf (128)'! – Gabe