Pascal4eg / Java

 Java | Фишки и трюки

Способы передачи параметров в Java

public class PassBy {
    public static void main(String[] args) {
        int i = 0;
        System.out.println(i); // 0
        changeValue(i);
        System.out.println(i); // 0

        SuperInt si = new SuperInt(0);
        System.out.println(si.i); // 0
        changeValue(si);
        System.out. println(si.i); // 10
    }

    public static void changeValue(int val) {
        val = 10;
    }

    public static void changeValue(SuperInt val) {
        val.i = 10;
    }

    static class SuperInt {
        public int i;
        public SuperInt(int i) {
            this.i = i;
        }
    }
}

В языках программирования существует два основных способа передачи параметров в методы (или функции) — "по значению" и "по ссылке". Эти методы определяют, каким образом изменения, внесенные в параметр внутри метода, влияют на исходное значение аргумента, переданного методу. Рассмотрим оба способа более подробно.

  1. Передача параметра "по значению" (pass-by-value):
    В этом способе исходное значение параметра не изменяется внутри метода. Метод работает с копией значения параметра. Это означает, что любые изменения, внесенные в параметр внутри метода, не отразятся на исходном значении, переданном методу. Параметры передаются "по значению" в большинстве простых типов данных.
  2. Передача параметра "по ссылке" (pass-by-reference):
    В этом случае метод получает не копию значения параметра, а ссылку на сам объект или переменную. Если метод изменяет значение параметра, это изменение отразится на исходном объекте или переменной, переданной методу. Параметры передаются "по ссылке" в языках программирования, поддерживающих ссылки на объекты, как например в языке C++ с использованием указателей.

Понимание разницы между передачей параметра "по значению" и "по ссылке" важно для правильной работы и отладки программ. В разных языках программирования могут быть разные правила для передачи параметров, поэтому важно знать, какой механизм используется в конкретном языке.

В Java передача всегда происходит "по значению", то есть содержимое переменной копируется при передаче в метод. Но важно понимать, что при передаче переменной ссылочного типа (любой не примитивный тип), скопируется именно ссылка на объект (а не сам объект) и соответственно в методе можно поменять сам исходный (переданный) объект.