当前位置:
- 首页
- /
- Java
- /
- [java]我的数据在哪里?——程序运行时数据的存放位置
[java]我的数据在哪里?——程序运行时数据的存放位置
首先,i是main方法中的局部变量,所以i的值会保存在main的方法栈中(如图所示),除了整型,其他的局部变量,同时是基本类型(boolean/char/double/float等)的都会保存在堆栈中。然后,p本身是引用类型,引用类型本身也会保存在堆栈中,而p中存放的是它指向的对象的地址(‘#####’部分)。p指向的Person对象会保存在堆中,任何通过new产生的对象都会放置在堆中,对象的成员属性和对象一起存放。请注意,Person类中的PI不会随对象一起存放,因为它本身由static修饰,所以是类成员,会被放置在静态存储中,这里如果有多个Person对象,那么这些对象都会指向同一个PI。最后,比较有意思的是String类型,如果String是通过new产生的,那么它会和普通的对象一样存放在堆中。而如果是通过字符串字面量声明的,那么,字面量会存放在静态存储中(字面量本身是不会改变的),通过str2引用指向它。字符串放在静态存储中可以方便复用,因为字符串本身是不会改变的,所以如果有多个字符串声明的值相同,其实他们指向的是同一个字符串。这里对于字符串有个小技巧,对于通过new创建的字符串,我们可以使用String类的intern()方法将它重新放置在静态存储中。
来源: