java跨方法传递对象引用变量,并对该变量赋值引起的问题

关于对象引用做方法参数问题,在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();
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值