您的位置:首页 > 编程语言 > Java开发

java的参数传递机制

2015-01-28 22:18 127 查看
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。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java