Arrays in Java and how they are stored in memory

后端 未结 3 1232
情话喂你
情话喂你 2020-11-29 08:56

I\'m trying to understand the array setup in java. Why must you initialize space for each each object in the array, after you have created the array. How is it stored in mem

3条回答
  •  一个人的身影
    2020-11-29 09:17

    If you are familiar with C/C++ you can think of Java object references as pointers to objects (or pointers to structs). So:

    Person p = new Person();
    p.setName("Helios");
    

    is:

    • declare a p pointer to a Person struct (in the stack)
    • reserve memory for and initialize Person struct
    • assign its address to p
    • execute method setName on object referenced by p

    So when you are doing:

    Person[] ps = new Person[5];
    

    you are reserving an array of 5 references to Person. Next you will have to create each real person and assign each reference to a place in the array.

    Edit: the (almost) C/C++ version of the previous code

    class Person { ... };
    typedef PersonStruct* Person; // I don't remember if this declaration is ok
    Person p = new PersonStruct();
    p -> setName(...);
    
    Person[] ps = new Person[5]; 
    // ps is a variable in the stack pointing to the array in the heap
    // (being the array five references to the PersoStruct)
    

    and you could do

    ps[3] = p;
    

提交回复
热议问题