Java的值传递
2016-03-09 00:00
190 查看
摘要: 由一道面试题说说Java的传递
先上题目,下面的程序输出结果是多少:
给各位小伙伴思考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啦
先上题目,下面的程序输出结果是多少:
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对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树