For performance reasons. In some other languages like SmallTalk types like int or char are also objects, and the methods can be invoked on them. This is more theoretically correct but current implementations run slower. Primitive types are compromise between purity and performance.
Where more necessary (null value possible or to use with collection framework), Java provides wrapper classes like java.lang.Integer and similar.