Boxing of an Integer and conservation of space in Java
Apparently, boxing of an int literal initialization into an Integer class will result in two different objects being assigned the same space in memory if the number is 127 or smaller, but different spaces in memory if the number is 128 or larger.
Take BoxTest.java:
public class BoxTest {
public static void main(String [] args) {
// These two objects will occupy different spaces in memory.
Integer i1 = 128;
Integer i2 = 128;
System.out.println("i1 = " + i1 + ", i2 = " + i2 + " => ");
if(i1 != i2) System.out.println("different objects");
if(i1.equals(i2)) System.out.println("meaningfully equal");
// These two, smaller objects, will occupy the same space in memory.
Integer i3 = 127;
Integer i4 = 127;
System.out.println("i3 = " + i3 + ", i4 = " + i4 + " => ");
if(i3 == i4) System.out.println("same object");
if(i3.equals(i4)) System.out.println("meaningfully equal");
}
}
The output:
[email protected] classpath in Java 6:23 am on June 6, 2011 Permalink |
beware of auto boxing gotcha in Java 5 .
How HashMap in Java gets values