我们知道,java中的参数传递分为值传递和引用传递。
对于基本类型和系统的对象如 String,Interger,Boolean,Double等,都是值传递;
而其他类型都是引用传递,这里就有个很有意思的问题,很多人搞不清楚,这里举个例子:
public class A{ public class A{ public static void main(String arg[]){ public static void main(String arg[]){ int[] a=new int[1]; int[] a=new int[1]; a[0]=3; a[0]=3; method1(a); method1(a); System.out.println(a[0]); System.out.println(a[0]); } } public static void method1(int[] a){ public static void method1(int[] a){ a[0]--; a=new int[0]; } a[0]=4; } } }
很显然在第一个例子中,执行一遍后a[0]的值变化了,而第二个例子中却没有变化,这是为什么呢?
因为第二个例子中,传进来的a又被指向了一个新的地址,开了一个新的空间,所以并不会改变main中的值。
由这个例子,就很好理解,我们想通过一个函数,传进一个对象,在函数中改变对象的指向,或者为对象新开辟一个空间都是不可行的;
传进来的对象参数只能改变其内部的属性值;
而如果我们要改变这个对象的话,就必须通过返回值来改变。