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

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

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

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

8 ответов

4 просмотра

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

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

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

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

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

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

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

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

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта