9.如何判断两个Class对象是否相等?类加载器的引用,类的主动使用和被动使用
1.两个class对象是否相等的条件
1.类的完整类名必须一致,包括包名。
2.加载这个类的ClassLoader(指的是ClassLoader实例对象)必须相同。
换句话说,在JVM中,即使两个类对象(Class对象)来源于同一个Class文件,被同一个虚拟机加载,但是只要加载它们的ClassLoader实例对象不同,那么这两个Class对象就不相等。
2.类加载器的引用的保存
JVM必须知道一个类是由启动类加载器加载还是由用户类加载器加载(除了启动类加载器之外的加载器)。如果一个类是由用户类加载器加载的,那么JVM会将这个类加载器的一个引用作为类信息的一部分保存在方法区中。
当解析一个类型到另一个类型的引用的时候,JVM需要保证这两个类型的类加载器是相同的。
3.类的主动使用和被动使用
主动使用会导致类的初始化,被动使用不会。
类的初始化时类加载的第3个阶段,也就是给静态变量赋值,以及执行静态代码块。