有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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);
}

}


共 (2) 个答案

  1. # 1 楼答案

    Store是一种引用类型。实例化引用类型时,将分配一部分未使用的堆来存储实际实例。然后,将有一个“参考”存储在您当前所在的任何位置。此引用“指向”实际对象的存储位置

    所以,

    实际的Store对象存储在其他地方,而不是Book实例中。在book实例中,将一个值更改为存储Store对象的内存地址

  2. # 2 楼答案

    由于Book类的每个实例都包含自己的Store类,因此这将为每个实例分配内存,而不是作为一个堆。如果希望对每个Book实例使用相同的Store实例,则必须像下面这样将Store实例传递到构造函数中的Book类中

    public class Book{
    
    private String bookName;
    private Store count;
    
    
    
    public Book(String bookName, Store count) { 
        this.bookName = bookName;
        this.count = count;
    }