java 函数指针-Java的交换函数和变量退栈后找不到了
发布时间:2023-06-13 09:19 浏览次数:次 作者:佚名
先分析一段简单的代码
//交换值
public static void swap(int a,int b){
int temp = a;
a = b;
b = temp;
}
//--------以下调用swap方法
int a=1;
int b=2;
swap(a,b);//调用后依旧是a = 1, b = 2
swap是一个交换函数,目的是交换 a 和 b 的值,但是当函数调用结束,函数和变量退栈后,a 和 b 在 swap的值将找不到(此时 a 和 b 的值并没有消失,而是函数退栈后找不到了!),所以这个时候必须要指针指向 a 和 b 的内存空间,即使在退栈后,也能通过指针所指向的内存地址找到a 和 b 的值。
这段代码是使用Java写的,Java同样会有这样的问题java 函数指针,但是Java是如何避免的?
Java是面向对象语言,很多时候都是通过对对象的操作来完成的,这涉及到Java的对象生存周期java 函数指针,在new完Java对象后,是由系统去执行析构函数(Java里貌似没析构函数的概念),可以理解为变量(属性)存储在里,但是对象的生存周期又特别长,(Java的对象存贮在堆里面)所以不会出现退栈而导致找不到变量值的情况。