在java中采用的是按值调用.也就是得到的是变量的一个拷贝
class Text22 { static int i = 1; public static void main(String[] args) { System.out.println(triple(i)); System.out.println(i); } public static int triple(int x) { int result = x * 3; return result; } }
其输出结果为3, 1;所以方法参数只是引用的变量的拷贝无法对变量值进行修改.但是却可以修改对象里的参数,这是因为对象本身即是一个拷贝方法参数与对象本就是指向的同一个拷贝的地址,所以其修改值,就好比创建的对象,类就好比一个模板,创建对象就是用模板做的一个拷贝,大家都是对对象进行操作,无论怎么折腾拷贝,也不会对模板造成影响.这是我的一个比较粗浅的理解.
class Text22 { public static void main(String[] args) { Person p1 = new Person("强森"); Person p2 = new Person("伪娘"); change(p1,p2); System.out.println(p1.name + p2.name); } public static void change(Person x,Person y) { Person temp = new Person("xxx"); temp = x; x = y; y = temp; System.out.println(x.name + y.name); } } class Person { String name; public Person(String name) { this.name = name; } }
运行结果为;伪娘强森
强森伪娘,证明方法内对象x,y成功互换了,但是p1,p2并没有互换,证明传过去的只是其拷贝,只是传值,,其只在方法内俩个拷贝进行了互换.方法并不能使一个对象参数引用其他对象参数,
总结一下,1.一个方法无法修改一个基本类型的数据.
2.一个方法可以改变一个对象参数的使用情况.
3.一个方法不能让对象参数引用一个新的对象.(到方法参数上的时候,方法里操作的是这俩个对象的拷贝)