Топ контрибуторов
loading
loading
Знаете ли Вы, что

Свои вопросы для тестов можно добавлять на странице с информацией о тесте. При этом для некоторых тестов добавление вопросов закрыто

Лента обновлений
ссылка Sep 18 16:14
Добавлен вопрос в тест Java - Эксперт
ссылка Sep 18 14:11
Комментарий от karpmoney:
Двусвязный список - каждый элемент списка имеет ссылку...
ссылка Sep 17 17:59
Комментарий от Handsome911:
varargs

https://docs.oracle.com/javase/1.5.0/docs/g...
ссылка Sep 17 16:11
Добавлен вопрос в тест C# - Средний уровень
ссылка Sep 16 09:47
Комментарий от dmytro_kudryk:
Как для основ, достаточно содержательный тест!
Статистика

Тестов: 153, вопросов: 8596. Пройдено: 441073 / 2165246.

Java / Передача параметров по ссылке и по значению

Автор: yohan  к списку      

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

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

В Java объекты всегда передаются по ссылке, а примитивы - по значению
Pass By Reference means the passing the address itself rather than passing the value. Pass By Value means passing a copy of the value to be passed.

public class A {
public static void main(String[] args) {
metod1(n); //значение переменной n останется = 10;

A a = new A();
metod2(a); //значение переменной n станет = 12;

a.l = 3;
A b = new A();
b.l = 6;
metod4(a,b); //значение a.l останется = 3, b.l останется = 6;
}

public static void metod1(int _n)
{
_n = _n*3; //значение переменной _n станет = 30, но _n удалится после завершения работы метода;
}

public static void metod2(A _a)
{
_a.metod3(2); //изменяет состояние объекта, на который ссылаются как переменая _a, так и переменная a;
}

public void metod3(int _p)
{
n = n+_p; //увеличивает значение переменной n на _p;
}

private static void metod4(A _a, A _b)
{
A temp = _a;
_a = _b; //значение _a.l теперь = 6;
_b = temp; //значение _b.l теперь = 3;
//по завершении метода переменные _a и _b уничтожаются;
}

private static int n = 10;
private int l;

Если Вам понравился вопрос, проголосуйте за него

Голосов: 47  loading...
AlekseyM   dogmops   denoza   mrKonyk   johnnydob   alex_skn   Polina88   zcmx   alex_bond   SamTan   akramatik   onting   alex1395   grim   zencd   lyapizz   vertigo633   allocator   chupika_bohdan1   alexgiant   dcba1257908   wind_dragon   drevlyanin   i_erofeev   bepeck   yura777   Ronny147   marmota   Kirilovskiy   burnichok   kaspi   TheEvilsscream   Vitalik23   Elen_KL   Gingery   jerdys   Sirelon   PavelArtLover   kobayashi   BalaboL   mishamhoyan   rogotulka   DanikG   Geldor   budgie   orion07   HOHOL