Ответ
Это два принципиально разных механизма передачи аргументов в функции/методы.
| Критерий | Передача по значению (Java) | Передача по ссылке (C++, Pascal) |
|---|---|---|
| Что передается | Копия значения переменной. | Фактический адрес или псевдоним (alias) исходной переменной. |
| Изменение параметра | Изменения параметра внутри метода не влияют на исходный аргумент. | Изменения параметра внутри функции напрямую меняют исходный аргумент. |
| Аналогия | Вы даете кому-то ксерокопию документа. Изменения на копии не затрагивают оригинал. | Вы даете кому-то ссылку на онлайн-документ. Изменения по ссылке меняют исходный файл. |
Java использует ТОЛЬКО передачу по значению. Для ссылочных типов передается копия ссылки, что ошибочно можно принять за "передачу по ссылке", но это не так.
Контрольный пример на C++:
// Передача по ссылке в C++
void swap(int &x, int &y) { int temp = x; x = y; y = temp; }
int a = 5, b = 10;
swap(a, b); // Теперь a == 10, b == 5. Аргументы поменялись местами.
В Java аналогичная функция swap для примитивов невозможна, что и доказывает отсутствие передачи по ссылке.
Ответ 18+ 🔞
Давай разберём эту дичь, а то народ путается, как слепой кот в сортире. Смотри, есть два способа запихнуть аргумент в функцию — по значению и по ссылке. И это, блядь, как небо и земля, как водка и кефир.
Вот табличка, чтобы не еб@ть мозг:
| Критерий | Передача по значению (Java) | Передача по ссылке (C++, Pascal) |
|---|---|---|
| Что передается | Копия значения переменной. | Фактический адрес или псевдоним (alias) исходной переменной. |
| Изменение параметра | Изменения параметра внутри метода не влияют на исходный аргумент. | Изменения параметра внутри функции напрямую меняют исходный аргумент. |
| Аналогия | Вы даете кому-то ксерокопию документа. Изменения на копии не затрагивают оригинал. | Вы даете кому-то ссылку на онлайн-документ. Изменения по ссылке меняют исходный файл. |
А теперь главное, слушай сюда, в рот меня чих-пых: Java использует ТОЛЬКО передачу по значению. Да-да, ты не ослышался. Всё, что ты слышал про "передачу по ссылке для объектов" — это пиздёж собачий и заблуждение. Для ссылочных типов передаётся копия самой ссылки. Это как дать другу ксерокопию визитки с адресом твоего дома. Он может по этому адресу прийти и нахулиганить внутри (изменить состояние объекта), но саму визитку (ссылку) переписать с адресом другого дома он не может. Вот и вся магия, ёпта.
Контрольный пример на C++:
// Передача по ссылке в C++
void swap(int &x, int &y) { int temp = x; x = y; y = temp; }
int a = 5, b = 10;
swap(a, b); // Теперь a == 10, b == 5. Аргументы поменялись местами.
Видишь эту амперсандную поебень &? Это и есть настоящая передача по ссылке. Функция swap меняет оригинальные переменные a и b нахуй.
А теперь попробуй сделать такое же на Java для примитивов. Правильно, нихуя не выйдет! Потому что передаётся копия значения, и все твои манипуляции внутри функции останутся в ней, как вонь в общественном туалете. Это и есть железобетонное доказательство, что в Java передачи по ссылке — ноль ебать. Всё, можно расходиться.