169 похожих чатов

Мой пример: на первом скрине я вызываю метод "removeSmallObjects", который

принимает себе в параметры "adjacencyLists"(тип HashMap<Integer, ArrayList<int[]>>), и ширину, высоту двумерного массива(colorArray.length, colorArray[0].length). этот метод имеет тип void, соответственно, результат я никуда не записываю. на втором скрине видно реализацию этого метода, вроде все понятно: удаляю из коллекции "adjacencyLists" "маленькие" обьекты. а теперь парадокс для меня: потом, после вызова метода "removeSmallObjects" я продолжаю работать с переменной "adjacencyLists"(например вывожу ее на экран) и вижу, что она "не содержит маленькие обьекты", то есть я вижу в переменной "adjacencyLists" результат работы метода "removeSmallObjects", хотя я результат метода не записывал, почему так?

я думал, что параметры методов работают так: если это ссылочная переменная, то тогда метод принимает КОПИЮ обьекта, может ее менять и тд, но оригинал остается неизменным. если посмотреть как работает моя эта программа, тогда я понимаю, что в параметры метод принимает не копию обьекта, а сам обьект? и тогда все изменения этого обьекта потом сохраняются?

8 ответов

2 просмотра

Если хотите работать с копией, то нужно явно копию создать. При передачи ссылки на объект, вы будете работать с одним и тем же объектом

Никита- Автор вопроса

явно создать копию - это в моем случае вот так?

Никита
как это?

Новая мапа, с новыми value

Никита
как это?

читай, переваривай, тут отличное объяснение ссылка

void означает, что твой метод ничего не возвращает, но это не мешает ему изменять объект по ссылке, переданной аргументом

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

Обсуждают сегодня

Здравствуйте, вопрос по структурам данных. Были у вас случаи, когда пришлось писать деревья или двунаправленные списки?
/ /
48
привет всем. Народ, кто-нибудь работал с мультипоточностью? Где посмотреть/ что почитать посоветуете? В идеале чтоб материал был максимально сжатый, времени читать например в...
Serg Vish
17
Всем привет! Скажите, никто не пытался уменьшить размер процесса ssl, которые ассоциируется с открытым соединением (не помню точное название этого процесса, но там была какая-...
Алексей
20
This is a big issue. Just by being a citizen of a country, you are denied to contribute to Open Source software: https://youtu.be/L5Ec5jrpLVk?si=1iIuHnMPbCB4anV-
Sharuzzaman Ahmat Raslan
72
а проверьте, собирается ли у кого сейчас транк лазаря через делюкс? у меня вот: fpcupdeluxe: info: Lazarus Native Installer (BuildModuleCustom: UserIDE): LazBuild: building Us...
Iluha Companets
20
добрый день. возможно ли изменить цвет окон лазаруса? Как?
Budemposmotret
35
Мне тут приспичило встроить в программу форматировние текста SQL, расставить переносы строк и отступы так, чтобы лучше читалось. Я что-то свое изобразил, оно после ключевых сл...
Sergey Bodrov
11
А какие существуют способы обработки ошибок выделения памяти в ядре? Т.е., допустим, есть функция, которая возвращает адрес свободной страницы в физической памяти и диапазон в...
disba1ancer
51
Господа, а кто-нибудь сталкивался с размещением на TTabControl/TTabSheet множества контролов (> 100) с последующими External: Access violation? Вот буквально на ровном месте. ...
Dmitry
29
Мдя, прикол, боевая сборка запускается (именно под отладчиком) после F9 примерно полторы минуты (97 секунд если быть точным). Начал копать - проблема детектится сразу - зависа...
Александр (Rouse_) Багель
12
Карта сайта