Java函数传递引述和值的区别
Java函数传递引用和值的区别
这个函数传递参数对于很多人来说可能已经感觉非常的熟悉了,高手可以直接跳过了
.
java中函数传递参数如果是基本类型的话传递的值,如果是对象的话则是传递的引用,当传递对象的在函数内部指向新的实例后,则原来引用的对象保持不变.
今天看了一下<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
java中函数传递参数如果是基本类型的话传递的值,如果是对象的话则是传递的引用,当传递对象的在函数内部指向新的实例后,则原来引用的对象保持不变.
change1方法中只是对val这个对象改变了一个值,所以main函数中val也随之改变.
change2方法中将val指向一个新的Value对象,所以main中的val保持不变,change2中val指向新的对象,所以main函数最终打印的还是100.
由上面分析可以知道,如果我们平时操作集合框架List,Map等时,传递的也都是引用.