基本类型和包装类型的区别中的这句话
基本数据类型存放在栈中是一个常见的误区! 基本数据类型的成员变量如果没有被 static 修饰的话(不建议这么使用,应该要使用基本数据类型对应的包装类型),就存放在堆中。
这句话容易让人有种误解:被 static 修饰的基本数据类型的成员变量存放在栈中。
实际上应该只要成员变量都存放在堆中吧。下面是《深入理解 Java 虚拟机》第三版里的内容,说明被 static 修饰的基本数据类型的成员变量也存放在堆中。
准备阶段是正式为类中定义的变量(即静态变量,被 static 修饰的变量)分配内存
并设置类变量初始值的阶段,从概念上讲,这些变量所使用的内存都应当在方法区中进
行分配,但必须注意到方法区本身是一个逻辑上的区域,在 JDK 7 及之前,HotSpot 使
用永久代来实现方法区时,实现是完全符合这种逻辑概念的;而在 JDK 8 及之后,类变
量则会随着 Class 对象一起存放在 Java 堆中
基本类型和包装类型的区别中的这句话
这句话容易让人有种误解:被 static 修饰的基本数据类型的成员变量存放在栈中。
实际上应该只要成员变量都存放在堆中吧。下面是《深入理解 Java 虚拟机》第三版里的内容,说明被 static 修饰的基本数据类型的成员变量也存放在堆中。