Because Java was largely based on C and C++, in which there are primitives just like Java.
In Java 5 there is [url=http://java.sun.com/j2se/1.5.0/docs/guide/language/autoboxing.html]autoboxing[/url], but that does not mean you should replace all your primitives with instances of the wrapper classes - that would be terribly inefficient.
here is what James Gosling had to say on this. I quote:-
Bill Venners: Why are there primitive types in Java? Why wasn't everything just an object?
James Gosling: Totally an efficiency thing. There are all kinds of people who have built systems where ints and that are all objects. There are a variety of ways to do that, and all of them have some pretty serious problems. Some of them are just slow, because they allocate memory for everything. Some of them try to do objects where sometimes they are objects, sometimes they are not (which is what the standard LISP system did), and then things get really weird. It kind of works, but it's strange.
Just making it such that there are primitive and objects, and they're just different. You solve a whole lot of problems.
I agree that with the way Java works now it would be very inefficient to use instances the wrapper classes instead of primitives, because it would mean you would have to do everything via references (you wouldn't have "direct" variables, which the primitives are) - so for every Integer, Char, Long etc. Java would need to allocate space on the heap, and you can only access it via references.
However, there's no reason why the Java compiler couldn't optimize all that overhead away. The Java compiler writers could treat the wrapper classes as "special" and convert them to primitives behind the scenes, and it would work just as efficiently as the primitives as we use them now in Java.
In Java 5, with autoboxing and -unboxing, the wrapper classes are already treated specially, but it's not done all the way. Maybe in a future Java version?