在java里面, 每运行一个方法就会创建一个栈,属于线程私有, 当方法结束以后栈也会随之弹出, 所以当方法传递过来的引用进行改变的时候是不生效的, 但是如果对传递过来的对象里面的值进行改变即使方法运行结束,所做的更改仍然保留, 因为对象是是存储在堆里面,属于线程之间共享, 即使方法运行结束,所做的更改仍然保留, 如下代码便展示这个问题
public static void main(String[] args) {
Test test = new Test();
test.setA(2);
int b = 1;
changeValue(b, test);
System.out.println("b的值为 " + b + ", test的值为 "+test.getA());
}
private static void changeValue(Integer a, Test test) {
a = 6;
int b = 7;
test.setA(b);
}
运行结果为:
b的值为 1, test的值为 7