关于对象引用做方法参数问题,在java中 基本类型变量做参数传另外一个方法中重新赋值时,会重新在栈中复制一份,对象引用也是一样,如
public methodA(){
int i = 0;
methodB(i);
sysout(i);//此时i还是0,methodB中赋值部分的x相对于A已经是栈中新生成的变量名称了。
}
methodB(int x){
x = x + 1;
}
夸方法传对象引用也同理;
public methodA(){
Student s = null;
methodB(s);
sysout(s);//此时s还是null,methodB中赋值部分的s相对于A已经是栈中新生成的变量名称了。但是如果在methodA中Student s = new Student();然后methodB中不对s赋值,只是改变s的属性,那s指向还是methodA中new出的对象的,只是这个对象属性改变而已。如果methodA中s=new Student(),但是methodB中还是对s进行赋值,s=new Student();,那么此处sysout的还是methodA中new出的Student对象,而不是methodB中的对象。归纳,对象的引用变量和基本变量一样,都在栈中,如果跨方法传递后重新赋值,则会在栈中拷贝生成新变量。对于引用变量,它重新赋值后虽然是指向了新生成的对象地址,但是引用变量本身也是拷贝的,原方法操作的却是老的引用变量,指向老的对象。
}
methodB(Student s){
s = new Student();
}