当前位置: 技术问答>java相关
一个有关传值\传址的问题.有奇怪.
来源: 互联网 发布时间:2017-04-29
本文导语: import java.util.* class test(){ public test(){ stringbuffer a= new stringbuffer(); a.append("aaa"); swap(a); System.out.println(a.tostring()); } void swap(Stringbuffer k){ k=new stringbuffer("ccc") } public...
import java.util.*
class test(){
public test(){
stringbuffer a= new stringbuffer();
a.append("aaa");
swap(a);
System.out.println(a.tostring());
}
void swap(Stringbuffer k){
k=new stringbuffer("ccc")
}
public static void main(String[} agrs){
test t =new test()
}
}
我觉得很能奇怪它为什么输出的值是"aaa"????
class test(){
public test(){
stringbuffer a= new stringbuffer();
a.append("aaa");
swap(a);
System.out.println(a.tostring());
}
void swap(Stringbuffer k){
k=new stringbuffer("ccc")
}
public static void main(String[} agrs){
test t =new test()
}
}
我觉得很能奇怪它为什么输出的值是"aaa"????
|
a 和 k都是reference,
a指向"aaa",
调用swap方法,形参k被付值a,也指向"aaa",
接着k=new stringbuffer("ccc"),
k指向了"ccc",a的值不变,
所以输出"aaa"
a指向"aaa",
调用swap方法,形参k被付值a,也指向"aaa",
接着k=new stringbuffer("ccc"),
k指向了"ccc",a的值不变,
所以输出"aaa"
|
k=new stringbuffer("ccc")改为k.replace(0,3,"ccc");
因为k=new stringbuffer("ccc")后 k指向了新的地址,而没有影响a;
因为k=new stringbuffer("ccc")后 k指向了新的地址,而没有影响a;
|
在方法内对这个引用=操作,方法结束后,不修改这个引用所指的对象
|
同意楼上
|
swap(a)将a("aaa"的地址)做一备份赋给k, 在swap()中k被指向新地址("ccc"的地址),你说a是会变吗?
|
a是对象的地址!