两段代码,结果的差异,请结合代码给图解下内存和执行过程。
字符串对象
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 /*arr[0]=new String("old_0"); arr[1]=new String("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
------固执的分割线---------
此时a[0]和a[1]的值被改变,其实就是arr的相应值改变了。最后就出现了结果如图:
所以就出现结果改变的情况了。
这么一作图,很直观了。
[2011-06-27]