1: что проходит по значению
Это означает, что когда метод называется, пропущенные параметры передаются копией значения. Примеры следующие:
открытый класс Temptest {private void test1 (int a) {// сделать что -то} public static void main (string [] args) {temptest t = new Temptest (); int a = 3; t.test1 (a); // Параметр, переданный здесь, должен пройти по значению}}Важные характеристики прохождения по цене: то, что передается, является копией значения, что означает, что она не связана друг с другом после прохождения.
Примеры следующие:
открытый класс Temptest {private void test1 (int a) {a = 5; System.out.println ("Метод test1 a ="+a); } public static void main (String [] args) {Temptest t = new Temptest (); int a = 3; t.test1 (a); // После прохождения изменение переменного значения метода Test1 не влияет на систему a aout.println ("Основной метод a ="+a); }}Результатом операции является:
a = 5 в методе Test1 A = 3 в основном методе
2: что проходит через ссылку
Это относится к пройденным параметрам при вызове метода, и пропущенные параметры передаются ссылкой. Фактически, переданный эталонный адрес - это адрес пространства памяти, соответствующий переменной.
Примеры следующие:
открытый класс Temptest {private void test1 (a a) {} public static void main (string [] args) {temptest t = new Temptest (); A = новый a (); t.test1 (a); // ПАРАМЕТР ПРОДОЛЖЕНИЕ ЗДЕСЬ - это пройти через ссылку}} класс A {public int age = 0; }3: важные характеристики прохождения ссылки
То, что передается, является ссылкой на значение, что означает, что как до, так и после прохождения точки с той же ссылкой (то есть в одном и том же пространстве памяти).
Примеры следующие:
открытый класс Temptest {private void test1 (a a) {a.age = 20; age = "+A.Age в System.out.println (" test1 method = "+A.Age);} public void main (String [] args) {Temptest t = new Temptest (); a a = new a (); A.Age = 10; T.Test1 (a); age ="+A. }} класс A {public int age = 0; }Результаты работы следующие:
Возраст = 20 в методе теста1, возраст = 20 в основном методе
4: Понять процесс прохождения посредством ссылки - диаграмма распределения памяти
Чтобы правильно понять процесс прохождения ссылки, вы должны научиться понимать процесс распределения памяти, и диаграмма распределения памяти может помочь нам понять этот процесс.
Используйте приведенный выше пример для анализа:
(1): запустить, запустите строку 8, создайте экземпляр A, а диаграмма распределения памяти выглядит следующим образом:
(2): запустить строку 9, измените значение возраста в случае A. Диаграмма распределения памяти после запуска выглядит следующим образом:
(3): запустите строку 10, которая должна передавать адрес пространства памяти, на который ссылается переменная A в основном методе к переменной A в методе Test1 в соответствии со ссылкой. Обратите внимание: эти две переменные совершенно разные, не обманывайте себя одним и тем же именем.
Распределение памяти следующее:
Поскольку он передается с помощью ссылки, то есть адрес пространства памяти передается, новая диаграмма памяти, сформированную после завершения передачи, выглядит следующим образом:
Другими словами: обе переменные указывают на одно и то же пространство.
(4): запустите строку 3 и назначьте значение возрасту экземпляра A, на которую указана переменная A в методе Test1. Новая схема памяти, сформированная после завершения, выглядит следующим образом:
В настоящее время изменение в возрастной стоимости экземпляра A вызвано методом Test1
(5): запустите строку 4 и в соответствии с диаграммой памяти в это время, выходной возраст = 20 в методе Test1
(6): запустите строку 11 и в соответствии с диаграммой памяти в это время, выходной возраст = 20 в основном методе
5: Изменения в приведенных выше примерах
Понимая приведенный выше пример, некоторые люди могут спросить, могут ли значения, передаваемые ссылкой, не влиять друг на друга? Какова модификация в методе Test1, который не влияет на основной метод?
Метод состоит в том, чтобы просто использовать новый экземпляр в методе Test1. Изменить на следующий пример, где третье поведение добавлено вновь:
открытый класс Temptest {private void test1 (a a) {a = new a (); // новая строка A.Age = 20; System.out.println ("test1 method age ="+a.age); } public static void main (String [] args) {Temptest t = new Temptest (); A = новый a (); a.age = 10; t.test1 (a); System.out.println ("Основной метод age ="+a.age); }} класс A {public int age = 0; }Результат работы:
возраст = 20 в методе теста1 возраст = 10 в основном методе
Почему результат этого прогона отличается от предыдущего примера? Лучше использовать диаграмму памяти, чтобы понять ее.
6: снова понимайте под ссылкой
(1): запустите, запустите строку 9, создайте экземпляр A, а диаграмма распределения памяти выглядит следующим образом:
(2): Запуск строки 10 предназначен для изменения значения возраста в случае A. Диаграмма распределения памяти после запуска выглядит следующим образом:
(3): Запуск строки 11 предназначен для передачи адреса пространства памяти, на которую ссылается переменная A в основном методе с переменной a в методе Test1 в соответствии со ссылкой. Обратите внимание: эти две переменные совершенно разные, не обманывайте себя одним и тем же именем.
Распределение памяти следующее:
Поскольку он передается с помощью ссылки, то есть адрес пространства памяти передается, новая диаграмма памяти, сформированную после завершения передачи, выглядит следующим образом:
Другими словами: обе переменные указывают на одно и то же пространство.
(4): запустите строку 3 и восстановите новый экземпляр A для переменной A в методе Test1. Новая схема памяти, сформированная после завершения, выглядит следующим образом:
(5): запустите строку 4, чтобы назначить значение возрасту нового экземпляра, на которую указано переменная A в методе Test1. Новая схема памяти, сформированная после завершения, выглядит следующим образом:
Примечание. В настоящее время возраст переменной A в методе Test1 изменяется, а основной метод не изменяется.
(6): запустите строку 5, и в соответствии с диаграммой памяти в это время, выходной возраст = 20 в методе Test1
(7): запустите строку 12, и в соответствии с диаграммой памяти в это время, выходной возраст = 10 в основном методе в соответствии с диаграммой выходной памяти = 10
7: Объяснение
(1): «В Java передача параметров передается по значению». Проходя мимо ссылки фактически передает значение эталонного адреса, поэтому он коллективно называется прохождением по значению.
(2): В Java только основные типы и строки в соответствии со следующим методом определения передаются по значению, а другие передаются ссылкой. Это должно напрямую определять строки, используя двойные кавычки: string str = "Java Private School";
Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.