Когда объект передается в качестве параметра методу, этот метод может изменить свойства объекта и вернуть измененный результат. Так это проход значения или справочный проход здесь?
Ответ: это передача стоимости. Язык программирования Java проходит только параметры со значениями. Когда экземпляр объекта передается в метод в качестве параметра, значение параметра является копией ссылки объекта. Указывая на тот же объект, содержимое объекта может быть изменено в методе вызываемого, но ссылка объекта (не копия ссылки) никогда не изменится.
Параметры Java, независимо от того, являются ли они примитивными типами или эталонными типами, проходят все копии (есть еще одна поговорка - это пройти значения, но лучше понять, что проходные копии и прохождение значений обычно относится к проходящим адресам).
Если тип параметра является примитивным типом, то передача является копией этого параметра, то есть значение исходного параметра, которое совпадает с передаваемым значением, упомянутым ранее. Если значение копии изменяется в функции, исходное значение не будет изменено.
Если тип параметра является ссылочным типом, то копия этого эталонного параметра передается, и эта копия хранит адрес параметра. Если адрес этой копии не изменяется в функции, но значение в адресе изменяется, то изменение в функции повлияет на параметры пропущенных. Если адрес копии изменяется в функции, например, новая, то копия указывает на новый адрес. В настоящее время входящий параметр по -прежнему указывает на исходный адрес, поэтому значение параметра не будет изменено.
пример:
открытый класс ParamTest {public static void main (string [] args) { / ** * Тест 1: Методы не могут изменить числовые параметры * / system.out.println ("Тестирование TripleValue:"); двойной процент = 10; System.out.println ("До: процент =" + процент); TripleValue (процент); System.out.println ("After: процент =" + процент); /** * Тест 2: Методы могут изменить состояние параметров объекта */system.out.println ("/ntesting triplesalary:"); Сотрудник Гарри = новый сотрудник («Гарри», 50000); System.out.println ("До: зарплата =" + harry.getsalary ()); Triplesalary (Гарри); System.out.println ("After: Parlary =" + harry.getSalary ()); /** * Тест 3: Методы не могут прикрепить новые объекты к параметрам объекта */system.out.println ("/ntesting swap:"); Сотрудник A = новый сотрудник ("Алиса", 70000); Сотрудник B = новый сотрудник («Боб», 60000); System.out.println ("До: a =" + a.getName ()); System.out.println ("до: b =" + b.getname ()); обмен (а, б); System.out.println ("After: a =" + a.getName ()); System.out.println ("After: b =" + b.getName ()); } частный статический void swap (сотрудник x, сотрудник y) {сотрудник Temp = x; x = y; y = темп; System.out.println ("Конец метода: x =" + x.getName ()); System.out.println ("Конец метода: y =" + y.getName ()); } частная статическая void Triplesalary (сотрудник x) {x.raisesalary (200); System.out.println ("Конец метода: зарплата =" + x.getsalary ()); } private static void triplevalue (double x) {x = 3*x; System.out.println ("Конец метода x ="+x); }}Покажите результаты:
Тестирование TripleValue: до: процент = 10.0. Метод x = 30,0after: процент = 10,0. Триплесаларий: до: заработная плата = 50000.0. Метод: заработная плата = 150000,0after: заработная плата = 150000.0. a = alice // сама ссылка не заменена после: b = bob
Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.