java的参数传递机制

java主程序在在调用方法时可以将自己的变量作为参数传递给调用的方法,之前一直以为这种机制包含值传递(副本机制)和地址传递两种。但经过网上查阅一些资料后发现并非如此。java的所有传递都是值传递(副本机制),都是将要传递的类变量拷贝一份作为调用方法的参数。只不过基本变量是将自身的值拷贝传递,而对象则是引用的地址进行拷贝(该地址的值也是存放在一处内存中)。所以我们将对象作为参数传递给调用的方法时,实际传递的是该对象地址的副本。当我们在被调用的方法内部仅对该地址的对象进行修改时,这些修改也会在调用方法结束后反映给调用元的对象,但是,如果我们在调用方法里修改了该地址的值,则失去了对该对象的修改入口,对新的地址对象的修改不会反映会调用处。

 

测试代码:

</pre><pre name="code" class="java">package com.sxg.map;

import java.util.ArrayList;
import java.util.List;

/**
 * 
* @author SXG (2015年1月27日)
 *
 */
public class TestJavaPara {

	// 主程序
	public static void main(String[] args) {
		// 第一次实例化该list
		List<String> list = new ArrayList<String>();
		// 添加一个字符串“a”
		list.add("a");
		// 调用测试方法
		TestJavaPara.test(list);
		// 打印出list里面的值
		for(String s : list){
			System.out.println(s);
		}
	}
	// 调用方法
	private static void test(List<String> list) {
		// 在参数list的引用没有改变之前添加“b”
		list.add("b");
		// 改变list的引用
		list = new ArrayList<String>();
		// 向改变引用后的list添加“c”
		list.add("c");
	}
}



输出结果:

a b

从结果可以看出c并没有被加入到主程序的list里面,但是b反映该了主程序的list。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值