Yes, they are the same - and they return the exact same object.
Example:
public class Tryout {
public static class A {
}
public static class B extends A {
}
public static void main(String[] args) throws Exception {
A a = new A();
A b = new B();
//the same class object, one achieved statically and one dynamically.
System.out.println(a.getClass() == A.class);
//the same class object using forName() to get class name dynamically
System.out.println(Class.forName("Tryout$A") == A.class);
//different class. B is not A!
System.out.println(b.getClass() == A.class);
}
}
Will yield:
true
true
false
Note that the last is yielding false
because - though the static type is the same, the dynamic type of B
is NOT A
, and thus getClass()
returns B
, which is the dynamic class object of b
.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…