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等时,传递的也都是引用.


你可能感兴趣的:(Java函数传递引用和值的区别)