值类型相关函数与对象类型相关函数内存调用过程

2023-12-13 07:23:23

值类型相关函数内存调用:

先来看这样一段代码,你认为它的运行结果是多少呢?

20和11还是20和10?

package org.example;

public class Main {
    public static void main(String[] args) {
        int a=10;
        add(a);
        System.out.println(a);
    }
    public static void add(int a){
        int b=10;
        System.out.println(a+b);
        a=11;
    }
}

答案是20和10,如果你猜对了请先不要窃喜,不妨继续往下看,检测一下自己是真的会还是仅仅猜对了

在Java中局部变量最终会被放在栈中,如下所示:

在这里插入图片描述

当add方法执行完毕,会将add方法所占用的栈的空间删除掉,如下所示:

在这里插入图片描述

因此最终输出的a的值其实是main函数中的a的值

对象类型相关函数内存调用:

Java的基础数据类型都是值类型,指针也是值类型,因而是直接存到内存,不是存地址去寻址

在这里插入图片描述

当add函数执行完毕,左侧栈所占用的内存就会被释放掉,但是右边堆所占用的内存并不会被随着函数调用结束而清空,因为我们无法确定是否还有其他的线程也引用堆中的对象,而需要使用GC垃圾回收机制完成

在这里插入图片描述

文章来源:https://blog.csdn.net/m0_64365419/article/details/134911641
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。