public class ParamTest { protected int num = 0; public void change(int i){ i = 5; } public void change2(ParamTest t){ ParamTest tmp = new ParamTest(); tmp.num = 9; t = tmp; } public void add(int i){ i += 10; } public void add2(ParamTest pt){ pt.num += 20; } public static void main(String[] args){ ParamTest t = new ParamTest(); System.out.println("Basic type parameters"); System.out.println("Original value: " + t.num); t.change(t.num); System.out.println("After change: " + t.num); t.change2(t); System.out.println("After change2: " + t.num); System.out.println(); t = new ParamTest(); System.out.println("t = new ParamTest()"); System.out.println("Original value: " + t.num); t.add(t.num); System.out.println("After add: " + t.num); t.add2(t); System.out.println("After add2: " + t.num); }}
运算结果:
Basic type parameters Original value: 0 After change: 0 After change2: 0 t = new ParamTest() Original value: 0 After add: 0 After add2: 20
从上面这个直观的结果中我们很容易得出如下结论: 1. 对于基本类型,在方法体内对方法参数进行重新赋值,并不会改变原有变量的值。 2. 对于引用类型,在方法体内对方法参数进行重新赋予引用,并不会改变原有变量所持有的引用。 3. 方法体内对参数进行运算,不影响原有变量的值。 4. 方法体内对参数所指向对象的属性进行运算,将改变原有变量所指向对象的属性值。
最后我们得出如下的结论: 1. 基本类型和基本类型变量被当作参数传递给方法时,是值传递。在方法实体中,无法给原变量重新赋 值,也无法改变它的值。 2. 对象和引用型变量被当作参数传递给方法时,在方法实体中,无法给原变量重新赋值,但是可以改变它 所指向对象的属性。至于到底它是值传递还是引用传递,这并不重要,重要的是我们要清楚当一个引用 被作为参数传递给一个方法时,在这个方法体内会发生什么
JAVA解惑学习笔记之五----传了值还是传了引用?
最新推荐文章于 2024-06-18 14:38:46 发布