====== Generics ======
The wrapper classes for the base types are present in a reduced form. Code like
Integer intObj = new Integer(15);
translates to Bytecode
new java/lang/Integer
dup
bipush 15
invokespecial java/lang/Integer(int): void
astore_0 [intObj]
First an Integer object is created and its constructor is called. It initializes the value to 15. \\
With auto boxing it's possible to simply write
Integer intObj = 15;
This leads to
bipush 15
invokestatic java/lang/Integer.valueOf(int): Ljava/lang/Integer;
astore_0 [intObj]
In this case the static method //valueOf// is called, which also creates an Integer object. Indeed, in the class //Integer// of the standard library for all small Integer values objects are preallocated and a simple reference to one of this is returned. A call to //valueOf// for small values is therefore very efficient. In our implementation of the runtime system we omit this cache.