Преобразование вычисления из int в код Bigint Java [дубликат]

[[1] * 4] * 3

или даже:

[[1, 1, 1, 1]] * 3

Создает список, который ссылается на внутренний [1,1,1,1] 3 раза - не три копии внутреннего списка, поэтому в любое время, когда вы изменяете список (в любом позиция), вы увидите изменение три раза.

Это то же самое, что и в этом примере:

>>> inner = [1,1,1,1]
>>> outer = [inner]*3
>>> outer
[[1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1]]
>>> inner[0] = 5
>>> outer
[[5, 1, 1, 1], [5, 1, 1, 1], [5, 1, 1, 1]]

, где это, вероятно, немного менее удивительно.

0
задан Maarten Bodewes 29 July 2014 в 17:35
поделиться

2 ответа

Используйте .equals() в отличие от == при сравнении объектов. == сравнивает ссылки на объекты, тогда как .equals() проверяет, имеют ли они одинаковые значения. Поскольку у двух объектов очень редко есть одна и та же ссылка, вы никогда не должны использовать ==, кроме сравнения примитивных типов (int, char, но String не является примитивным типом!), Где это не имеет значения.

Итак, вы хотите:

if (pkPublicExBI.equals(pkPublicExBIrecreated)) {

Вместо

if (pkPublicExBI == pkPublicExBIrecreated) {
2
ответ дан Zach 21 August 2018 в 00:04
поделиться
  • 1
    Поблагодарите за правильный ответ и не торопитесь, чтобы объяснить мне, почему я прав. (Я перехожу от программирования C к Java и программирования, ориентированного на классы) – KrNeki 29 July 2014 в 15:46
  • 2
    Ваши рассуждения верны, но объяснение неверно. Оператор == сравнивает идентичность объекта. Понятие «адрес в памяти» находится на гораздо более низком уровне, чем доступ к Java. Как в теории, так и на практике, JVM перемещает объекты вокруг в кучу, поэтому один и тот же объект может очень хорошо отображаться на разных адресах. – jarnbjo 31 July 2014 в 10:58
pkPublicExBI == pkPublicExBIrecreated

используйте это вместо pkPublicExBI.equals(pkPublicExBIrecreated).

0
ответ дан Deepanshu J bedi 21 August 2018 в 00:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: