java实例化其他实例字段中的对象
在下面的程序中,我在Book class成员字段中实例化了一个Store对象。这个命令是在堆中的每个Book类对象空间内分配内存,还是在堆的空闲区域分配一次内存并为其分配地址
public class Book{
private String bookName;
private Store count = new Store(10);
public Book(String bookName ) {
this.bookName = bookName;
}
public void display(){
System.out.println(this.bookName);
}
public static void main(String[] args) {
Book main = new Book("Machines");
main.display();
System.out.println(main.count.bookCount);
}
}
# 1 楼答案
Store
是一种引用类型。实例化引用类型时,将分配一部分未使用的堆来存储实际实例。然后,将有一个“参考”存储在您当前所在的任何位置。此引用“指向”实际对象的存储位置所以,
实际的
Store
对象存储在其他地方,而不是Book
实例中。在book实例中,将一个值更改为存储Store
对象的内存地址# 2 楼答案
由于Book类的每个实例都包含自己的Store类,因此这将为每个实例分配内存,而不是作为一个堆。如果希望对每个Book实例使用相同的Store实例,则必须像下面这样将Store实例传递到构造函数中的Book类中