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,并没有在堆内存中新开辟一个对象空间