принимает себе в параметры "adjacencyLists"(тип HashMap<Integer, ArrayList<int[]>>), и ширину, высоту двумерного массива(colorArray.length, colorArray[0].length). этот метод имеет тип void, соответственно, результат я никуда не записываю. на втором скрине видно реализацию этого метода, вроде все понятно: удаляю из коллекции "adjacencyLists" "маленькие" обьекты. а теперь парадокс для меня: потом, после вызова метода "removeSmallObjects" я продолжаю работать с переменной "adjacencyLists"(например вывожу ее на экран) и вижу, что она "не содержит маленькие обьекты", то есть я вижу в переменной "adjacencyLists" результат работы метода "removeSmallObjects", хотя я результат метода не записывал, почему так?
я думал, что параметры методов работают так: если это ссылочная переменная, то тогда метод принимает КОПИЮ обьекта, может ее менять и тд, но оригинал остается неизменным. если посмотреть как работает моя эта программа, тогда я понимаю, что в параметры метод принимает не копию обьекта, а сам обьект? и тогда все изменения этого обьекта потом сохраняются?
Если хотите работать с копией, то нужно явно копию создать. При передачи ссылки на объект, вы будете работать с одним и тем же объектом
явно создать копию - это в моем случае вот так?
гифкой можно ответить?
Это будет shallow copy. Вам же нужна deep copy
Новая мапа, с новыми value
читай, переваривай, тут отличное объяснение ссылка
void означает, что твой метод ничего не возвращает, но это не мешает ему изменять объект по ссылке, переданной аргументом
Обсуждают сегодня