Я студент, который недавно изучает JAVA.
Я подхожу к этому языку, основываясь на своем опыте C ++.
Итак, мне потребовалось почти четыре дня, чтобы понять разрыв между c ++ и java с точки зрения вызова по значению или ссылки.
Java является вызовом по значению, потому что вызывающая функция передает переменную ссылочного типа самой вызываемой стороне.
Когда я понял вышеприведенное предложение, у меня неожиданно возник вопрос:
Мой вопрос таков:
Я узнал, что один из вызовов по значению преимущества без побочных эффектов .
В JAVA гарантируется, что переменная ссылочного типа сама по себе не имеет побочного эффекта.
Но реальный объект, на который ссылается ссылочная переменная, может иметь побочный эффект
after возвращает функцию вызова.
Так есть ли способ гарантировать, что ссылка на объект в памяти кучи также не имеет побочного эффекта для функции вызывающей стороны?
(И если я неправильно понял механизм JAVA, пожалуйста, скажите мне)
=========================== =========
Добавить пример
class Person{
String name;
int age;
Person(String name, int age){
this.name = name;
this.age =age;
}
}
public static void foo(){
Person p = new Person("haha", 17);
System.out.println(p.name); // haba
boo(p);
System.out.println(p.name); // hoho, but foo() wants original value "haha"
}
public static void boo(Person p){
p.name = "hoho";
}
Я хочу, чтобы функция boo () не изменяла переменную-член (здесь p.name) экземпляра p.