我是最近学习JAVA的学生。
我根据我的 C++ 经验接近这种语言。
所以我花了将近四天的时间来理解 c++ 和 java 在按值调用或引用方面的差距。
Java 是按值调用的,因为调用者函数将引用类型变量本身传递给被调用者。
当我明白了上面这句话时,我突然想到了一个问题。
我的问题是...
我了解到,按值调用的优点之一是没有副作用。
在 JAVA 中,保证引用类型变量本身没有副作用。
但是引用变量引用的真实对象
在返回到调用者函数后 可能会产生副作用。
那么有没有办法保证堆内存中的引用对象对调用者函数也没有副作用?
(如果我误解了围绕 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 实例的成员变量(此处为 p.name)。