Как в java передаются ссылочные переменные по ссылке или по значению? Вроде везде написано что только по ссылке, но вот прочел статью https://javarush.com/groups/posts/1946-neizmennoe-v-java-final-konstantih-i-immutable и оказывается есть все таки передача по значению ( immutable ) совсем запутался, какие еще есть исключения из правила в java передаются ссылочные переменные по ссылке?
Grimax
25 уровень
Как в java передаются ссылочные переменные по ссылке или по значению?
Решен
Комментарии (3)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Grimax
20 января 2019, 18:18
Спасибо большое за ответы. Хотел сказать что мне не так важна техническая реализация как сам результат, но судя по всему надо погрузиться )
0
Ярослав Java Developer Master
20 января 2019, 17:39решение
По значению. Чтобы понимать, каким образом ссылки передаются по значению, нужно немного спуститься вниз до указателей.
По сути, указатель - это переменная, которая хранит адрес другой ячейки памяти. А данный адрес сохранен в виде числа в 16-тиричной системе. Например: #1ac3d5. И когда данный указатель передается в метод, на самом деле копируется значение адреса #1ac3d5. То есть, передается не сам указатель, а адрес, а адрес - значение указателя.
По этой же схеме сделана и передача ссылочных переменных. На самом деле передается не ссылка, а адрес объекта, на который указывает ссылка.
+3
Сергеев ВикторMaster
20 января 2019, 17:06
для начала immutable это из другой оперы.
immutable объект, это объект которые не меняет свое состояние. Например строка String, её нельзя изменить. Любой метод, который вроде меняет строку, на самом деле возвращает новый объект класса String, т.е. новую строку.
Второе, все в java передается по значению. Передаче по ссылке в java называют момент, когда передается сама ссылка. Но все равно это значение. В общем не забивайте этим голову пока что.
+2