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

Вы можете подписаться на RSS ленту новых тестов сервиса Quizful, в том числе и отдельно по каждой категории

Лента обновлений
ссылка 17:56:54
Комментарий от annivel:
структура цикла такова, что она поделена на три части. П...
ссылка Sep 22 21:44
Добавлен вопрос в тест C# - Средний уровень
ссылка Sep 22 15:40
Комментарий от lyahasik:
почему 4 строка верна?
переменная типа структуры не был...
ссылка Sep 22 11:25
Комментарий от atlantahawk:
для джунов самое то. на OCA такие вопросики и дают
ссылка Sep 21 21:18
Комментарий от iBromberg:
У Вас <iostream> украли.
Статистика

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

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;

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

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