Java : почему пишет false?
Результат должен быть true, в чем ошибка?
List<Integer[]> blocks = new ArrayList<>();
for(int r = 0; r < 64; r++) {
Integer block[] = {1,2};
blocks.add(block);
}
Integer[] xy1 = {1,2};
System.out.println(blocks.contains(xy1));
Ответы (1 шт):
Автор решения: insolor
→ Ссылка
Потому что равенство массивов (в отличие от равенства списков) проверяется по внутреннему id объекта (условно - по его адресу в памяти), как при сравнении объектов через ==, а не equals.
Чтобы массивы были равны, они должны быть одним и тем же массивом. У вас массивы созданные в цикле - это не тот же самый массив, наличие которого вы проверяете, поэтому contains и не находит его.
Если бы у вас был список списков, то все бы работало, т.к. равенство списков проверяется по равенству их элементов.
Вносим минимальные изменения в код, и все волшебным образом начинает работать:
List<List<Integer>> blocks = new ArrayList<>();
for(int r = 0; r < 64; r++) {
List<Integer> block = List.of(1,2)
blocks.add(block);
}
List<Integer> xy1 = List.of(1,2);
System.out.println(blocks.contains(xy1));