java 传值与传引用

来源:互联网 发布:网页制作什么软件好 编辑:程序博客网 时间:2024/06/10 09:11
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

0 0
原创粉丝点击