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?