9.如何判断两个Class对象是否相等?类加载器的引用,类的主动使用和被动使用

目录

  • 1.两个class对象是否相等的条件
  • 2.类加载器的引用的保存
  • 3.类的主动使用和被动使用

1.两个class对象是否相等的条件

1.类的完整类名必须一致,包括包名。
2.加载这个类的ClassLoader(指的是ClassLoader实例对象)必须相同。
换句话说,在JVM中,即使两个类对象(Class对象)来源于同一个Class文件,被同一个虚拟机加载,但是只要加载它们的ClassLoader实例对象不同,那么这两个Class对象就不相等。
9.如何判断两个Class对象是否相等?类加载器的引用,类的主动使用和被动使用_第1张图片

2.类加载器的引用的保存

JVM必须知道一个类是由启动类加载器加载还是由用户类加载器加载(除了启动类加载器之外的加载器)。如果一个类是由用户类加载器加载的,那么JVM会将这个类加载器的一个引用作为类信息的一部分保存在方法区中。
当解析一个类型到另一个类型的引用的时候,JVM需要保证这两个类型的类加载器是相同的。
9.如何判断两个Class对象是否相等?类加载器的引用,类的主动使用和被动使用_第2张图片

3.类的主动使用和被动使用

主动使用会导致类的初始化,被动使用不会。
类的初始化时类加载的第3个阶段,也就是给静态变量赋值,以及执行静态代码块。
9.如何判断两个Class对象是否相等?类加载器的引用,类的主动使用和被动使用_第3张图片

更多JVM文章请参考我的JVM专栏:https://blog.csdn.net/u011069294/category_10113093.html

你可能感兴趣的:(JVM,Class对象是否相等,类的主动使用和被动使用)