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

Java的值传递

2016-03-09 00:00 190 查看
摘要: 由一道面试题说说Java的传递

先上题目,下面的程序输出结果是多少:

public static void main(String[] args) {
List list = new ArrayList();
list.add("a");
dele(list);
for (int i =0;i<list.size();i++) {
System.out.println(list.get(i));
}
}
static  void dele(List list ){
list.add("b");
list = new ArrayList();
list.add("c");
}

给各位小伙伴思考5秒钟...

好了,输出答案是 a b,你答对了嘛?下面我会解释一下这道题目,如果有不对的地方欢迎拍砖

首先的先明确什么是值传递和引用传递:

1、值传递:将实参的值传给对应的形参,在方法内部执行的时候,不论形参如何变化,都是不会影响到实参的;

2、引用传递:也可以理解为地址传递,将实参的地址传给对应的形参,那么在方法运行的时候,操作形参就等同于操作实参一样,因为它们的地址是相同的嘛;

那么在Java中,传递基本都可以理解为值传递:

1、当参数为基本类型时,形参传递的就是该基本类型的值;

2、当参数为引用类型时,Java会将实际的地址拷贝一份,赋给形参;

回到题目中,我们假设实参list的地址为A,调用dele方法时,Java会将地址A拷贝一份,我们假设为地址B,此时A和B是相等的,dele方法中使用list的地址也就是B,那么当它add元素"b"时,由于地址一致,所以相当于操作原集合;

当list指向一个新集合时,此时B地址就会发生改变,而A并没有改变,而且A和B没有关系,此时添加的元素"c",实际上是添加在了地址B集合当中,回到main方法,遍历地址A的集合,当然结果就是 a b啦
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Java 传递