У меня есть целые числа, которые должны быть равны (и я проверяю их по выходным данным). Но в моем if
условиях Java не видит, чтобы эти переменные имели одинаковое значение.Почему Java не видит, что целые числа равны?
У меня есть следующий код:
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]);
И следующий результат:
FINE: >>>>>> different
FINE: Compare:: 60,145 -> 60,145
Вероятно, я должен добавить, что point
определяется так:
Integer[] point = new Integer[2];
и pay
нас взяли из цикла-конструктора:
for (Integer[] pay : payoffs2exchanges.keySet())
Таким образом, эти две переменные имеют целочисленный тип.
Если у вас есть открытый ум, тогда вам может понравиться мое объяснение ... Это связано с тем, что создатели Java рояльно прищурились, когда решили создать классы-оболочки, у которых действительно жалкая производительность (у вас нет представление об отходах, сгенерированных путем обертывания * int * внутри * Integer *). Они делали это главным образом потому, что не смогли создать что-то чистое и эффективное, например, * Trove * * TLongIntHashMap *. Конечно, ожидайте, что snarky kneejerk сохранит комментарии здесь от людей, которые пили кулинарную помощь Java, объясняя, как я ошибаюсь, и как классы-оболочки являются находкой;) – SyntaxT3rr0r
кстати, никогда не делайте * нового Integer [2] *, потому что вы вынуждаете создание нового объекта. ** IFF ** вы продолжаете использовать классы-оболочки, такие как * Integer * (что вам действительно не нужно, но это еще одна тема), вы хотите сделать * Integer.valueOf (2) * (кстати, что позже один ** гарантирует ** согласно спецификациям Java, повторное использование первых 256 объектов Integer от -128 до 127, но это не очень хорошо известный Java-мозг). – SyntaxT3rr0r
SpoonBender: Как насчет решения Java-создателей * только * разрешить перегрузку оператора для строк? Таким образом 'Integer.valueOf (127) == Integer.valueOf (127)', но 'Integer.valueOf (128)! = Integer.valueOf (128)'! – Gabe