What is the difference between a.getClass() and A.class in Java?
class, java, reflection
Solution
I wouldn't compare them in terms of pros/cons since they have different purposes and there's seldom a "choice" to make between the two.
`a.getClass()` returns the runtime type of `a`. I.e., if you have `A a = new B();` then `a.getClass()` will return the `B` class.
`A.class` evaluates to the `A` class statically, and is used for other purposes often related to reflection.
In terms of performance, there may be a measurable difference, but I won't say anything about it because in the end it is JVM and/or compiler dependent.
This post has been rewritten as an article here.
Problem
In Java what pros/cons exist surrounding the choice to use `a.getClass()` or `A.class`? Either can be used wherever a `Class<?>` is expected, but I imagine that there would be performance or other subtle benefits to using both in different circumstances (just like there are with `Class.forName()` and `ClassLoader.loadClass()`.