Skip to content

成员变量的存放位置 #2239

@Orange-Summer

Description

@Orange-Summer

基本类型和包装类型的区别中的这句话

基本数据类型存放在栈中是一个常见的误区! 基本数据类型的成员变量如果没有被 static 修饰的话(不建议这么使用,应该要使用基本数据类型对应的包装类型),就存放在堆中。

这句话容易让人有种误解:被 static 修饰的基本数据类型的成员变量存放在栈中。

实际上应该只要成员变量都存放在堆中吧。下面是《深入理解 Java 虚拟机》第三版里的内容,说明被 static 修饰的基本数据类型的成员变量也存放在堆中。

准备阶段是正式为类中定义的变量(即静态变量,被 static 修饰的变量)分配内存
并设置类变量初始值的阶段,从概念上讲,这些变量所使用的内存都应当在方法区中进
行分配,但必须注意到方法区本身是一个逻辑上的区域,在 JDK 7 及之前,HotSpot 使
用永久代来实现方法区时,实现是完全符合这种逻辑概念的;而在 JDK 8 及之后,类变
量则会随着 Class 对象一起存放在 Java 堆中

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions