Menu

Параметры методов в Java: аргументы, передача по значению и возврат

Как работают параметры методов в Java — передача аргументов, разница между параметрами и аргументами, правило передачи по значению в Java и возврат значений.

На этой странице есть исполняемые редакторы: меняйте, запускайте и сразу видите результат.

Параметры позволяют методу принимать входные данные

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

Вы перечисляете каждый параметр с типом и именем. Внутри тела метода параметр ведёт себя как обычная локальная переменная, которая уже содержит то, что передала вызывающая сторона.

name — это параметр. "Sam" и "Alex" — это аргументы, конкретные значения, переданные при вызове. Одно определение метода, два разных результата.

Параметры против аргументов

Эти два слова часто используют небрежно, но различие стоит держать в голове:

  • Параметр — это заполнитель в объявлении: String name.
  • Аргумент — это значение, которое вы действительно передаёте: "Sam".

Таким образом, void greet(String name) объявляет параметр, а greet("Sam") передаёт аргумент. Когда кто-то говорит «этот метод принимает два параметра», он имеет в виду объявление; «я передал два аргумента» — это про вызов.

Несколько параметров

Разделяйте параметры запятыми и давайте каждому свой собственный тип — нельзя разделить один тип между двумя параметрами, как это иногда делают при объявлении переменных:

Аргументы сопоставляются с параметрами строго по позиции, а не по имени. describe("Sam", 30, true) работает, потому что порядок совпадает с (String name, int age, boolean active). Поменяйте местами два аргумента совместимых типов — и вы получите тихую логическую ошибку, а не ошибку компиляции, поэтому порядок важен.

Распространённая ошибка — написать int add(int a, b). Каждому параметру нужен свой тип: int add(int a, int b).

Возврат значения

Параметры — это то, как данные поступают внутрь; возвращаемое значение — это то, как результат выходит обратно наружу. Объявите тип возврата перед именем метода и используйте return, чтобы вернуть значение вызывающей стороне:

Тип возврата (double) должен соответствовать тому, что вы на самом деле возвращаете через return. Метод, объявленный как void, ничего не возвращает — он всё же может использовать простой return; для раннего выхода, но не может вернуть значение. В тот момент, когда выполняется return, метод завершается, и управление возвращается к месту вызова.

Java передаёт по значению

Это сбивает с толку почти всех поначалу. Когда вы передаёте аргумент, Java копирует значение в параметр. Для примитивов это означает, что метод получает свою собственную копию — изменение параметра никогда не затрагивает переменную вызывающей стороны:

x остаётся равным 5. Метод изменил свою собственную копию числа, а не оригинал.

Передача объектов: всё ещё по значению, но следите за ссылкой

Объекты кажутся исключением, но это не так. Копируется ссылка (стрелка, указывающая на объект), а не сам объект. Поэтому метод указывает на тот же объект и может его изменять:

Два разных результата, одно правило. addItem следует по ссылке и изменяет реальный список, поэтому вызывающая сторона видит появление new. replace переприсваивает параметру совершенно новый список — но это лишь перенаправляет локальную копию ссылки, поэтому list вызывающей стороны остаётся нетронутым. Вывод: вы можете изменить объект через параметр, но никогда не сможете заставить переменную вызывающей стороны указывать на что-то новое.

Далее: перегрузка методов

Теперь вы знаете, как передать методу именно те входные данные, которые ему нужны. Но что, если вы хотите, чтобы одно имя метода принимало разные наборы параметров — скажем, print(int) и print(String)? Это перегрузка методов, и это тема следующей страницы.

Часто задаваемые вопросы

В чём разница между параметром и аргументом в Java?

Параметр — это переменная, указанная в объявлении метода, — String name в void greet(String name). Аргумент — это конкретное значение, которое вы передаёте при вызове метода: greet("Sam") передаёт аргумент "Sam". Коротко: параметры живут в объявлении, аргументы — в вызове.

Java передаёт по значению или по ссылке?

Java всегда передаёт по значению. Для примитивов передаётся копия значения, поэтому переприсваивание параметра не может изменить переменную вызывающей стороны. Для объектов передаётся копия ссылки — вы можете изменить объект, на который указывает ссылка (например, добавить элемент в список), но переприсваивание самого параметра не влияет на переменную вызывающей стороны.

Как передать несколько аргументов в метод в Java?

Перечислите параметры в объявлении через запятую, каждый со своим типом: int add(int a, int b). Вызовите метод, передав аргументы в том же порядке: add(2, 3). Java сопоставляет аргументы с параметрами строго по позиции, а не по имени, поэтому порядок должен совпадать.

Coddy programming languages illustration

Учитесь программировать с Coddy

НАЧАТЬ