1、
2、
开始解释:
1、对于基本数据类型,我直接以一个两个数交换的例子演示,因为比较简单
package test; public class Test { public static void main(String[] args) { int a=10,b=20; AA obj=new AA(); obj.swap(10,20 ); System.out.println("main方法中的a="+a+",b="+b);//10,20 } } class AA{ public void swap(int a,int b) { System.out.println("方法swap调用开始时方法中的a="+a+",b="+b);//10,20 int temp=a; a=b; b=temp; System.out.println("方法swap调用结束后方法中的a="+a+",b="+b);//20,10 } }
显然main方法中的值并没有改变~一定要体会
运行结果:
2、对于引用类型,比较复杂还是看代码
第一种:引用类型p.age把10改成了10000
package test; public class Test { public static void main(String[] args) { Person p=new Person(); p.name="master"; p.age=10; AA obj=new AA(); obj.testData(p); System.out.println("main方法中的p.age="+p.age);//10000 } } class Person{ String name; int age; } class AA{ public void testData(Person p) { p.age=10000; } }
第二种:p=null;代表指向空地址,所以main方法中的age=10不变
package test; public class Test { public static void main(String[] args) { Person p=new Person(); p.name="master"; p.age=10; AA obj=new AA(); obj.testData(p); System.out.println("main方法中的p.age="+p.age);//10 } } class Person{ String name; int age; } class AA{ public void testData(Person p) { p=null; } }
第三种:这里在同样的地方又创建了一个Person对象p,但是非常可惜在这个类运行结束后,这个对象就被垃圾回收掉了,所以并没有影响到main方法中的name和age属性,所以age还是等于10.
package test; public class Test { public static void main(String[] args) { Person p=new Person(); p.name="master"; p.age=10; AA obj=new AA(); obj.testData(p); System.out.println("main方法中的p.age="+p.age);//10 } } class Person{ String name; int age; } class AA{ public void testData(Person p) { p=new Person(); p.name="Jack"; p.age=10000; } }
以上三种情况可以对比着看,只要理解了就好,建议画内存图(栈,堆,方法区)~