Considering following basics:
Object
lives only on heap,Object
andInteger
IS-A Object
I find myself difficult to answer such a simple question: Is there any difference between int[]
and Integer[]
inside of JVM? Or it makes sense only at "compile-time"?
There is a difference at run-time.
int[]
is an array of primitive int values. Integer[]
is an "object" array, holding references to Integer objects.
Most important practical difference: int[]
cannot hold null
values.
But I'm still confused: does
int[]
store just a primitive values? If so - doesn't it mean that primitive types can live on heap without being wrapped?
int[]
does store primitive types. And the array itself lives on the heap. However, those primitives are allocated as part of the array. They are not stored separately elsewhere on the heap. This is very similar to how a primitive field is part of an object instance: The object is on the heap, and its field is an integral part of that object (whereas for a non-primitive field, only the reference is stored inside the object and the target instance that reference points at is stored separately on the heap).
You could say the int
is "wrapped" inside the array.
This image should help you to understand the difference:
int
is a number, it's a primitive type. Integer
is an object.
When you have an array of Integer
s, you actually have an array of objects. Array of int
s is an array of primitive types.
Since arrays are objects, they're allocated on the heap. If it's an array of int
s, these int
s will be allocated on the heap too, within the array.
You may find this link helpful.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With