When we say

```
Class c = Integer.class;
System.out.println(c);

```

it prints

> 
> `class java.lang.Integer`
> 
> 
> 

which makes sense because `java.lang.Integer` is a class. So we can have a corresponding `Class` object.

But when I do

```
Class c1 = int.class;
System.out.println(c1);

```

it prints `int` which I felt is kind of ambiguous as `.class` returns an object of type `Class` and `int` is not a class (but a primitive type). 

What is the motive behind allowing .class operation on primitive types when there is no such class (`primitiveType.class.getName()`) present? 

Also if you see `toString(`) method of class `Class` 

```
public String toString() {
    return (isInterface() ? "interface " : (isPrimitive() ? "" : "class "))
        + getName();
}

```

As primitive types are not classes or interfaces it simply print the name (`int` for `int`). So why allow creating `Class` objects of a class which is not present?