您的位置:首页 > 编程语言 > Java开发

关于java值传递的问题

2011-06-27 16:38 239 查看
public class PassAddr {
public static void main(String[] args) {
String s=new String("old");  //1
method(s);  //3
System.out.println(s);
}
static void method(String str){
str=new String("new");  //2
}
}

这个输出结果为:old

public class T {
public static void main(String[] args) {
String[] arr=new String[2];
arr[0]="old_0";
arr[1]="old_1"; //11
method(arr); //14
System.out.println(arr[0]+";"+arr[1]);
}
static void method(String[] a){//12
a[0]="new_0";
a[1]="new_1"; //13
}
}

这个输出却是:new_0;new_1

-------------------------------------------
自己发的问题,想了半天想通了。解析下,希望各位斧正!

===================================
string://1处时:



//2处时:



//3处:
由于方法调用已经完成,所以str临时变量在stack中消失,s还是0x001,其地址处对象new String("old")没有被动;所以输出结果还是old;
---------------------------------------------------固执的分割线------------------------------------------------------
//11处内存状态:



//12处:



//13处时候的内存状况:



此时a[0]和a[1]的值被改变,其实就是arr的相应值改变了。最后就出现了结果如图://14



所以就出现结果改变的情况了。
这么一作图,很直观了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: