Будут ли изменения отражены в исходной переменной?
На следующем изображении p
указывает на person
,
p
передается как ссылка на функцию с именем callFunction
, Теперь, если я сделаю какие-либо изменения в p
будут ли они также отражены в person
? Пожалуйста, объясни.
Я понимаю, что переданный аргумент является ссылочным значением исходной переменной (я надеюсь, что так!). Но я не могу думать дальше.
3 ответа
Если вы измените детали p
как таковой, это отразится
// Nothing done to p before this
p.changeName("Not Sanika Anymore"); // This will be reflected as both point to the same object as references are the same
Если вы создаете нового человека и назначаете его p
тогда это не будет
// New Person for p
p = new Person("New Sanika"); // now this p is pointing to the newly created object's reference
p.changeName("Not Sanika Anymore"); // This won't be reflected
Это потому, что Java является просто передачей по значению. Вы передаете ссылку на объект в качестве значения callFunction()
,
Этот ответ Eng.Fouad объясняет эту концепцию действительно хорошим способом.
Пока вы меняете members of the object
на что указывает ссылка p
, Они будут отражены, как Java передает параметр по значению.
Что такое Pass by value
??
Фактический параметр (или выражение аргумента) полностью вычисляется, и результирующее значение копируется в местоположение, используемое для хранения значения формального параметра во время выполнения метода / функции. Это расположение обычно представляет собой кусок памяти в стеке времени выполнения для приложения (как это обрабатывает Java), но другие языки могут выбирать хранение параметров по-разному. Таким образом, у способа нет способа связаться с исходной ссылкой здесь.
Так Pass by reference
реализован по-другому, это где на самом деле вы можете иметь свободу игры со ссылкой. Здесь ссылки могут быть изменены в методе.
Да, потому что обе ссылки указывают на один и тот же объект Person. Когда вы изменяете какой-либо атрибут, используя любую ссылку, тот же объект будет обновлен.