看下面的类:
class Cat ( int id; String name; static int sid; Cat (String name) { this.name = name; id = sid++; } public static void main (String[] args) { Cat.sid = 100; Cat mimi = new Cat("mimi"); Cat pipi = new Cat("pipi"); } }
内存的分配情况如下:
1、main方法中第一行 Cat.sid = 100
因为sid是静态变量,无论Cat类是否创建了对象,创建了几个对象,都只是在Data segment(数据区)分配一块内存,类型是int,名字叫sid,值为100.
2、第二行new了一个Cat对象,首先会在栈中分配一块内存,放局部变量mimi,然后在堆中构建一个Cat对象,里面有id和name属性。
String其实是个类,“mimi”是字符串常量,会在Data segment中分配一块内存,所以name属性是"mimi"的引用。
3、第三行再构建一个Cat对象pipi,同理,只不过此时sid变成102。
最后的内存分配如下图:
时间: 2024-11-06 18:53:03