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

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

Лента обновлений
ссылка Feb 16 15:55
Комментарий от hardcorepony:
хороший вопрос
ссылка Feb 16 15:09
Комментарий от dmitrichek:
Спасибо за полезный тест
ссылка Feb 16 11:49
Добавлен вопрос в тест Photoshop
ссылка Feb 15 19:59
Добавлен вопрос в тест Python 3 Основы
ссылка Feb 15 08:56
Комментарий от VitalyV:
Вопрос некорректный. Объединяют как было верно выше упом...
Статистика

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

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