В этой статье объясняется передача параметра по значению и по ссылке в Java. Это для начального уровня, который пытается изучить основы языка Java.
Передача параметров в функцию показана ниже: мы передаем две переменные x и y в функцию с именем NumberUtil.pow.
int x = 5; int y = 3; System.out.println ( NumberUtil.pow (x , y) );
Код выше показывает, что значение x равно 5, значение y равно 3, и эти значения передаются в NumberUtil.pow. Функция NumberUtil.pow должна использовать эти значения, выполнять некоторые вычисления и возвращать некоторое значение. Возвращенное значение затем выводится на консоль с помощью System.out.println.
Давайте создадим класс под названием Swap с методом swap. Метод swap должен иметь два параметра. См. код ниже
package id.ststech.javabasic.passingparameter; public class Swap { public static void swap ( int a, int b ) { // Your code goes here } }
Смотрите проблему, показанную на картинке. Если у вас есть два стакана, один стакан наполнен вином, а другой наполнен свежей водой. Что вы будете делать, если я попрошу вас поменять местами оба стакана, чтобы в первом стакане была вода, а во втором — вино.
Возьмите еще один пустой стакан!
Смотрите картинку ниже
Теперь давайте посмотрим, как кодировать
package id.ststech.javabasic.passingparameter; public class Swap { public static void swap ( int a, int b ) { int c = a; // Step 1 a = b; // Step 2 b = c; // Step 3 } }
Теперь давайте попробуем использовать эту функцию в нашем основном приложении Java.
package id.ststech.javabasic.passingparameter; public class MyApp { public static void main(String[] args) { int x = 3; int y = 8; System.out.println("Before swap"); System.out.println("x = " + x); System.out.println("y = " + y); Swap.swap(x, y); System.out.println("After swap"); System.out.println("x = " + x); System.out.println("y = " + y); } }
При запуске приложения переменные x и y не меняются местами!
Before swap
x = 3
y = 8
After swap
x = 3
y = 8
Это все потому, что передача этого параметра вызывается по значению, то есть при передаче параметров значение, которое мы передаем, будет помещено в другую переменную как копия. Когда мы обмениваемся, копия заменяется.
В Java примитивные типы данных по умолчанию обрабатываются как передача значения параметра. Судя по картинке выше, на самом деле мы меняем местами a и b (локальные переменные, а не x и y). Вот почему переменные x и y по-прежнему имеют одно и то же значение. Если мы хотим иметь передачу параметров по ссылке, нам нужно использовать объекты вместо примитивных типов данных.
Например, мы создаем класс Number
package id.ststech.javabasic.passingparameter; public class Number { private int value; public Number(int value) { super(); this.value = value; } public int getValue() { return value; } public void setValue(int value) { this.value = value; } public String toString() { return String.valueOf(this.getValue()); } }
Затем добавьте в класс Swap новый метод с именем swapNumber.
package id.ststech.javabasic.passingparameter; public class Swap { // This method is by value public static void swap ( int a, int b ) { int c = a; // Step 1 a = b; // Step 2 b = c; // Step 3 } // This method is by reference public static void swapNumber ( Number a, Number b ) { int c = a.getValue(); a.setValue(b.getValue()); b.setValue(c); } }
Затем добавьте код, чтобы попробовать его в main.
Number m = new Number(3); Number n = new Number(8); System.out.println("Before swap"); System.out.println("m = " + m); System.out.println("n = " + n); Swap.swapNumber(m, n); System.out.println("After swap"); System.out.println("m = " + m); System.out.println("n = " + n);
Запустите код и посмотрите, что изменилось.
Before swap m = 3 n = 8 After swap m = 8 n = 3
Вот и все. Надеюсь, это хорошо объяснено и легко понять концепцию.
Исходный код примера можно скачать здесь
https://github.com/ststechid/javabasic-passingparameter