You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java中使用==比较Class<?>对象是否安全?Class实例是否唯一

Java中Class对象的==比较规则

核心规则

  • 当同一个类被同一个类加载器加载时,对应的Class<T>对象是全局唯一的,用==比较必然返回true。
  • 若同一个类被不同类加载器加载,会生成独立的Class<T>对象,此时==比较结果为false。

你的代码分析

你给出的代码里,STRING.getClass()和"Goodbye World".getClass()拿到的都是java.lang.String的Class对象。而String类是由JVM的引导类加载器负责加载的,整个JVM进程中只会存在一个String类的Class实例,所以a.theClass == a.theClass2的结果一定是true,这段代码不可能输出true以外的内容。

额外说明

Class类没有重写equals方法,所以它的equals方法和==的行为完全一致——都是直接比较对象引用。如果遇到跨类加载器的场景,要判断两个Class对象是否代表逻辑上的同一个类型,可以比较它们的全限定类名(比如调用getCanonicalName()),不过这种场景在常规业务开发中很少碰到,大多出现在自定义类加载器的场景里。

内容的提问来源于stack exchange,提问作者Govind Parmar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 22:35:03