关于Java 调用函数进行两个变量值的交换
2015-09-05 21:31
330 查看
交换两个变量的值,如果是基础类型比如int, 直接进行交换:
int aToSwap = 1; int bToSwap = 2;
一个经典的问题就是如果我有一个swap 方法如下,试问在主函数里调用了这个swap 方法以后 ,从主函数里传入的两个变量值交换了没有?
public void swap(int a, int b){
int temp = a;
a=b;
b=temp
}
答案是没有,我们知道C++里面有指针的概念,而java没有这个概念,那么如何理解这里的交换呢:
1. 主函数运行时,jvm会在堆内存创建两个int 型的值1和2
2. 然后在栈内存创建两个变量名 aToSwap 和 bToSwap 指向堆内存的1 和 2
3. 调用swap 的时候,会在栈内存创建两个临时变量a、b 分别指向堆内存的1和2,
4. swap 函数执行,临时变量a、b的值发生了交换
5, swap函数调用完毕,从栈中释放a、b
6.主函数显示aToSwap 、bToSwap 值并没有交换。
那如果用swap 函数交换的是两个对象呢?
其实答案是一样的,因为swap 调用的时候, 都会创建临时变量,swap函数调用完后,临时变量都会被交换然后释放,真正要交换的两个变量并没有被交换。
这个问题主要就涉及的就是函数调用,已经变量在堆栈中的创建。
int aToSwap = 1; int bToSwap = 2;
一个经典的问题就是如果我有一个swap 方法如下,试问在主函数里调用了这个swap 方法以后 ,从主函数里传入的两个变量值交换了没有?
public void swap(int a, int b){
int temp = a;
a=b;
b=temp
}
答案是没有,我们知道C++里面有指针的概念,而java没有这个概念,那么如何理解这里的交换呢:
1. 主函数运行时,jvm会在堆内存创建两个int 型的值1和2
2. 然后在栈内存创建两个变量名 aToSwap 和 bToSwap 指向堆内存的1 和 2
3. 调用swap 的时候,会在栈内存创建两个临时变量a、b 分别指向堆内存的1和2,
4. swap 函数执行,临时变量a、b的值发生了交换
5, swap函数调用完毕,从栈中释放a、b
6.主函数显示aToSwap 、bToSwap 值并没有交换。
那如果用swap 函数交换的是两个对象呢?
其实答案是一样的,因为swap 调用的时候, 都会创建临时变量,swap函数调用完后,临时变量都会被交换然后释放,真正要交换的两个变量并没有被交换。
这个问题主要就涉及的就是函数调用,已经变量在堆栈中的创建。
相关文章推荐
- 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简单理解
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树
- [原创]java局域网聊天系统