当前位置: java社区 > 01-初学乍练 > 阅读正文

java在main定义的变量在堆中还是栈?

2021.9.3.   527 次   480字

在java中,变量存储在哪,要看的是变量的声明位置

在方法中声明的局部变量,存储在内存的栈中,包括main方法

则main方法中的基本数据类型是存储在栈中,

但对引用数据类型来说,栈中保存的是它的引用地址,引用数据的数据本身实际存放在堆中。

例如,对于以下变量,a存储在栈中,栈存储了b的引用地址,堆存储了b数据。

    public static void main(String[] arg) {
        int a=-129;
        String b = new String("abc");
        System.out.println(a);
        System.out.println(b);
    }

此外,字符串常量池也在堆中。常量池分为多种,有的在堆中,有的在其他位置,如整数常量池在方法区中。

ps:每个变量其实都有一个唯一指定的内存地址,基础数据类型之所以叫”基本“,是因为简单、常用,所以就直接放在了栈中,随栈被产生和销毁,在使用时根据栈偏移量就可以得到它的地址,而引用数据类型很多,又往往需要共享,所以放在堆中,堆中存放着大量数据,即引用数据本身在堆中,但它不适合通过偏移量得到它的地址,故栈中保存堆中变量的内存地址。

本篇完,还有疑问?

加入QQ交流群:11500065636 IT 技术交流群