Sobes.tech
Junior — Middle
110

Ποια είναι η διαφορά μεταξύ της μεταβίβασης επιχειρημάτων μέσω αναφοράς και μέσω τιμής κατά την κλήση μιας συνάρτησης;

Απάντηση από AI

sobes.tech AI

Передача аргументов по значению означает, что в функцию передается копия значения аргумента. Изменения внутри функции не влияют на оригинальную переменную вне функции.

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

В Java все примитивные типы передаются по значению, а объекты — по значению ссылки (то есть копируется ссылка на объект, но не сам объект). Это значит, что внутри метода можно изменить состояние объекта, но нельзя переназначить саму ссылку, чтобы повлиять на переменную вне метода.

Пример:

public class Example {
    public static void modifyPrimitive(int x) {
        x = 10; // изменение локальной копии
    }

    public static void modifyObject(StringBuilder sb) {
        sb.append(" world"); // изменение объекта
    }

    public static void main(String[] args) {
        int a = 5;
        modifyPrimitive(a);
        System.out.println(a); // Выведет 5, т.к. примитив передан по значению

        StringBuilder sb = new StringBuilder("Hello");
        modifyObject(sb);
        System.out.println(sb.toString()); // Выведет "Hello world", т.к. объект изменен через ссылку
    }
}