java 传值与传引用

1 篇文章 0 订阅
1 篇文章 0 订阅
public class Test {  

String str = "goods";
public void change(String str2){
str2="goods";
}
public static void main(String args[]){  
Test t = new Test();
String str2 = "aaaa";
t.change(str2);
System.out.println(str2);
    } 


输出结果:

aaaa

并不是:

goods


change 中传的str2是变量str2的一个地址副本,并没有修改String str2的值,change函数中修改的只是副本地址的值,而非地址所指向的具体值

public class Test {  

String str = "goods";
public void change(DataObj dob){
dob.setName("goods");
}
public static void main(String args[]){  
Test t = new Test();

                DataObj dob = new DataObj();

                dob.setName("aaaa");
t.change(dob);
System.out.println(dob.getName());
    } 


class DataObj{
private String name;
private double value;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getValue() {
return value;
}
public void setValue(double value) {
this.value = value;
}
}

输出结果:goods

goods

并不是:aaaa

在change函数中传入的值为dob地址副本,在change函数中修改了dob地址所指向对象的成员变量值,所以再次调用dob地址指向的对象则成员变量name值被改变

如果将change函数改为

public void change(DataObj dob){
dob=null;
}

输出结果:goods

因为change函数修改的是dob地址的副本的值,并没有修改dob地址所指向的对象成员变量,所以输出值为goods

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值