java创建对象时候内存的分配
java创建对象时候内存的分配
首先,我们来看一段java代码
public class Demo1 {
public static void main(String[] args) {
Book b1 = new Book();
b1.name = "悲惨世界";
b1.price = 99;
b1.say();
Book b2 = b1;
b2.say();
}
}
class Book {
int price;
String name;
public void say() {
System.out.println("名字叫《" + name + "》的书的价格为:" + price);
}
}
在这段代码中,我们创建了b1对象,然后又有这么一句话Book b2 = b1;
那么这一句话是重新开辟了一块内存空间还是赋值地址给b2呢?接下来我们具体分析一下:
1、在栈内存中创建一个名为b1,类型为Book的变量,初始值为null;
2、在堆内存中创建一个对象实例,并把地址赋值给b1;
3、
b1.name = "悲惨世界";
b1.price = 99;
这两句话是给堆内存中的对象赋值
4、然后下一句话就是在栈内存中创建一个名为b2,类型为Book的变量,初始值为null,接下来再把b1的地址赋值给b2
5、最后一句话就是调用地址为 堆内存中地址为0X1234的方法了。
经过上面的分析我们就可以得出结论:Book b2 = b1;其实就是把b1的地址赋值给了b2,并没有在堆内存中新开辟一个对象空间