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

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

Лента обновлений
ссылка Sep 19 23:47
Комментарий от panalex79:
Спасибо, Вы правы
ссылка Sep 19 23:11
Комментарий от ksp107:
Такое сообщение об ошибке возможно если I1 или/и I2 не об...
ссылка Sep 19 15:31
Комментарий от panalex79:
public class C implements I2, I1{}
подчеркивает I2, ...
ссылка Sep 19 15:29
Комментарий от panalex79:
IDEA с таким написания кода не соглашается и выдает ош...
ссылка Sep 15 05:04
Комментарий от OlehD:
какие книжки можете посоветовать почитать о сервлетах?
Статистика

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

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