Могу ли я изменить аргумент в 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;
}