aspose file tools
The moose likes Beginning Java and the fly likes Dynamic Memory Allocation for arrays Big Moose Saloon
  Search | Java FAQ | Recent Topics
Register / Login


JavaRanch » Java Forums » Java » Beginning Java
Reply Bookmark "Dynamic Memory Allocation for arrays" Watch "Dynamic Memory Allocation for arrays" New topic
Author

Dynamic Memory Allocation for arrays

Kavin Preethi Narasimhan
Greenhorn

Joined: Sep 08, 2008
Posts: 4
Hello I am Kavin Preethi , getting myself trained to learn the basics of Java

I have a doubt in the concept of dynamic memory allocation for arrays

Claim: Arrays are said to have dynamic memory allocation in Java
the array and declaration and initialization goes as follows :
String[] names= new String[3];
(In the above case, I am able to understand the new keyword denotes that the memory is being allocated dynamically)
Whereas consider the following syntax
String[] names={"xxx","yyy","zzz"};
(In the above case how do you still perceive that the memory is being allocated dynamically,this is my doubt)

Thanks in advance
Kavin
Campbell Ritchie
Sheriff

Joined: Oct 13, 2005
Posts: 32833
    
    4
Where does that claim come from? It is useful to Quote Your Sources so everybody can read them.

When you declare an array variable, the JVM allocates space for the reference. In fact exactly the same happens for any kind of object. If it is a field, then the reference defaults to null and if it is a local variable, it might take whatever was in memory there before, so the compiler insists that reference be initialised before use.
That doesn't mean there are any objects associated, nor memory for the object. When you initialise the reference by creating an array object, the JVM finds enough memory for all the references. For new int[3] it needs 3 words for the ints and one word for the length parameter which is of course 3. Maybe more memory: don't know. Once that array is set up it is length 3, and you can't change the 3; you can however say

. . . = new int[6];

in which case the reference to the 3 array is lost and a new 6-member array is put in memory with 6 words for the ints, one word for the length (6) and maybe more memory: don't know.
Of course at this stage all the ints in your arrays are 0.

A bit more complicated for your String example; when the JVM loads the class, it sees the three Strings "xxx" "yyy" "zzz" and puts them into a special area in memory. A few microseconds later, when it executes {"xxx", "yyy", "zzz"} it finds the objects again and puts their references (memory locations) into the array, so the Strings can be found again. [This particular behaviour is peculiar to Strings, thought some other classes (eg Integer) show similar behaviour for some values.]

There are actually 3 ways to initialise an array:

new int[3];

That creates a 3-member array with default values (=0) for all the members.

{0, 1, 2, 3};

That is sort of syntactic sugar for "create an array of ints with the values 0, 1, 2, 3 in and count how many there are (4)." That syntax is only permitted in the same statement as

int[] numbers =

There is a hybrid which reads

new int[]{0, 1, 2, 3}

and can be used anywhere an array can be used. That means "create a new array of ints with the values 0, 1, 2, 3 in and count how many there are (4)."

String[] names = {"Kavin", "Preethi", "Narasimham"};

is like the 2nd example, it means "I want a String[] array and I want you to call it "names" and I want these values in it: "Kavin", "Preethi", "Narasimham", and I want you to count how many there are."

* * * * * *
In Java5 and 6 you can also create arrays with varargs, but I'll say no more about that here.
 
 
subject: Dynamic Memory Allocation for arrays
 
Similar Threads
Hashcode doubt
doubt in Array construction
Funadamental doubt on garbage collection
Doubt about Serialization
What is causing this NoSuchElementException?