java中对象作为函数入参,函数中对该对象进行修改,那么函数外该对象值是否改变?
需要考虑函数中是怎么对该对象进行修改的。
如果在函数中仅仅是修改了对象的属性值,那么函数外,该函数的值是被修改后的值。
如果是函数中对该对象重新赋值了,那么函数外,该函数的值是不变的,还是赋值前的对象值。
java中数据分别存储在栈中和堆中,基本数据类型的值和对象的引用保存在栈中,具体对象值保存在堆中。方法的入参如果是基本数据类型,则栈中存储的是原值的拷贝;如果是对象数据类型,则栈中存储的是对象引用地址的拷贝。
如果函数中对对象重新赋值了,那么栈中入参的引用地址则变成了其他的地址了,故函数外的对象还是原来的值。
public class Test {
public static void main(String[] args) {
Person pa = new Person("张三");
change(pa);
}
private static void change(Person pb){
Person pc = new Person("李四");
pb = pc;
}
public static class Person{
private String name;
public Person(String name){
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
}