Могу ли я изменить аргумент в Java?

В C++ я мог бы сделать что-то вроде:

sometype var = somevalue;
mutate(var);
// var is now someothervalue

void mutate(sometype &a) {
    a = someothervalue;
}

Есть ли эквивалентная вещь в Java?

Я пытаюсь сделать что-то вроде:

Customer a;

public static void main(String[] args) {
    a = newCustomer("Charles");
    Customer b = null;
    mutate(b);
    System.out.println(b.getName()); // NullPointerException, expected "Charles"
}

void mutate(Customer c) {
    c = a;
}

Если Customer является изменчивым, почему это приводит к NullPointerException?

1 ответ

Решение

Похоже, вы путаете с изменчивостью. Изменчивость - это просто изменение состояния объекта. То, что вы показываете в примере, это не просто изменчивость. Вы полностью изменяете экземпляр, ссылаясь на другой экземпляр (=).

sometype var = somevalue;
mutate(var);

void mutate(sometype a) {
    a = someothervalue; // changing a to someothervalue.
}

Что такое изменчивость

sometype var = somevalue;
mutate(var);
var.getChangeState() // just gives you the latest value you done in mutate method

    void mutate(sometype a) {
        varType someParamForA= valueX;
        a.changeState(someParamForA); // changing a param inside object a.
    }

Да, в случае непостоянных объектов, это полностью допустимо в Java. Вы можете увидеть изменения после того, как вы вызвали метод mutate.

случай примитивов::

Помните, что вы не можете сделать это с Java в случае примитивов. Все примитивные переменные неизменны.

Если вы хотите добиться того же с Java для примитивов, вы можете попробовать что-то вроде этого

int var = 0;
var = mutate(var);

int mutate(int a) {
    a = a + 1;
    return a;
}
Другие вопросы по тегам