After coming across this question in several interviews, came up with a small piece of code to compare primitive type and wrapper object. Auto boxing after Java 5 has shadowed the behind seen happenings to fellow developers. :-)
Output:
There will be n number of pages in google to give the differences, I am just giving a small program to compare the performance of int and Integer.
import java.util.Date;
/**
* PerformanceTester.java
*
* @author cananth
*/
public class PerformanceTester {
public void processWithWrapper()
{
long startTime = new Date().getTime();
Integer
ctr = 0;
for (int i = 0; i <
Integer.MAX_VALUE; i++) {
ctr
+= i;
}
long endtime = new Date().getTime();
System.out.println("---------------------------------------------------");
System.out.println("Time using Integer: " + (endtime - startTime) + " ms");
System.out.println("---------------------------------------------------");
}
public void
processWithPrimitive() {
long startTime = new Date().getTime();
int i = 0;
int ctr = 0;
for (i = 0; i <
Integer.MAX_VALUE; i++) {
ctr
+= i;
}
long endtime = new Date().getTime();
System.out.println("Time using int: " + (endtime - startTime) + " ms");
System.out.println("---------------------------------------------------");
}
public static void main(String[] args)
{
System.out.println("Same
Object");
System.out.println("---------------------------------------------------");
PerformanceTester
test = new PerformanceTester();
test.processWithWrapper();
test.processWithPrimitive();
test.processWithWrapper();
test.processWithPrimitive();
System.out.println();
System.out.println("New
Object");
System.out.println("---------------------------------------------------");
new
PerformanceTester().processWithWrapper();
new
PerformanceTester().processWithPrimitive();
new
PerformanceTester().processWithWrapper();
new
PerformanceTester().processWithPrimitive();
}
}
Same Object
---------------------------------------------------
Time using Integer: 7835 ms
---------------------------------------------------
Time using int: 1505 ms
---------------------------------------------------
Time using Integer: 7685 ms
---------------------------------------------------
Time using int: 1489 ms
---------------------------------------------------
New Object
---------------------------------------------------
Time using Integer: 7369 ms
---------------------------------------------------
Time using int: 1 ms
---------------------------------------------------
Time using Integer: 7356 ms
---------------------------------------------------
Time using int: 1 ms
---------------------------------------------------
The difference in execution is huge. In few of my trials I have got 0ms too for the int.
Verdict: Never use wrapper class for computations.
Great :)
ReplyDeleteAnother article about primitive and wrapper
http://www.behindjava.com/2014/06/primitive-and-wrapper-classes-in-java.html