Objects are fairly easy to understand in Java. The object is constructed, is allocated space in the heap, and you assign it to a variable name (reference) that points to it. No big deal. But how are primitive types represented? And where are they located (stack or heap)?
I thought of this question when I was wondering what the Integer.toString(int) method might look like. It can’t parse the text because… it’s not text. It can’t invoke a toString() method explicitly or implicitly, because that would be both circular logic and a flagrant disregard for the fact that primitive types can’t have methods assigned to them (since they aren’t objects). I suppose it is logically possible for the method to have tons of if/else conditionals for all possible int values between Integer.MIN_VALUE and Integer.MAX_VALUE, but that also seems much more complicated than it should be.
So how does this work?
Instances of primitive types are represented as bit patterns in memory. So for example, an
intis represented as 32 bits (4 bytes, 1 32-bit word).Either. It depends on what kind of variable you hold the primitive value in.
The core of the method is a simple algorithm is a loop that repeatedly
Just like you would do if you were converting a binary number to decimal by hand.
(For details, look at the source code. Every Sun / Oracle JDK includes the source code for the core libraries. Alternatively you can easily find the source code (in various versions) on the internet with a Google search.)