今天看了一下<java程序员面试宝典>这本书,看到了引用与传值的一些介绍,下面给出一个例子解释一下:
package honest.test; /** * 测试引用 * * @author Yuedong Li * */ public class TestRefer { public static void main(String[] args) { Value val = new Value(20); change1(val); System.out.println("main1: " + val.getI()); change2(val); System.out.println("main2: " + val.getI()); } public static void change1(Value val) { val.setI(100); System.out.println("method1:" + val.getI()); } public static void change2(Value val) { val = new Value(200); System.out.println("method2:" + val.getI()); } } /** * 测试类 * * @author Yuedong Li * */ class Value { int i; public Value(int i) { this.i = i; } public int getI() { return i; } public void setI(int i) { this.i = i; } }
先看一下输出的结果:
method1:100 main1: 100 method2:200 main2: 100
change1方法中只是对val这个对象改变了一个值,所以main函数中val也随之改变.
change2方法中将val指向一个新的Value对象,所以main中的val保持不变,change2中val指向新的对象,所以main函数最终打印的还是100.
由上面分析可以知道,如果我们平时操作集合框架List,Map等时,传递的也都是引用.