I think that what is confusing you is that you are thinking of the ArrayList as an ArrayList of objects, not as an ArrayList of references to objects.
An ArrayList of Object represents an index-accessible list of references to objects.
It is valid for such a reference to not refer to a real object but instead be "null".
Hence, you have five reference "slots", each with a value of null.
This is not the same as a series of four nulls, or zero nulls.
Look at your initial and primitive array of strings - its length is five, not zero.
Or even simpler, when you have a class with a field of type Object, it still takes space, regardless of whether it is actually referring to something or is null. Otherwise, you wouldn't be able to instantiate the class and not need to reallocate it when you actually assigned something to the field.