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