Consider the following images. The first image shows how an array of primitive types (byte, short, int, long, float, double, char, boolean) is stored in memory.
The array itself being an object is instanciated using the new keyword and is allocated some memory in the heap. But since it is a primitve types arrays it directly stores as much primitives values as its size. These values are set to 0 (in the case of int primitive type array) unless we explicitely change them using an instruction such as intArray[0] = 10;

In the case of a refence type array however, there is an interesting difference. The array itself is allocated some memory space on the heap after being instanciated using the new keyword. But it does not directly store the objects but it store the reference to the objects it is holding. These reference would be null or the reference (or adress) to the corresponding object somewhere in memory. The reference to each object has the default value of null unless it is changed with an instruction similar to empArray[0] = new Employee(10, 20);
Regarding your follow up question, in a linked list, suppose I am trying to find an object located at, let's say the 11th position starting from the head of the list, I will have to iterate 10 times to find it. thus the size and the position of an element in a linkedlist will impact the time it takes to retrieve an element. In an array however I simply need to know the index and it finds the element in a constant time.
