关于Class的类名与类加载器的一点小探索

今天在开发时,需要实现根据类型来判断类型是否符合,具体来说,是传入一个Class类的参数,判断该参数是否是指定的类型。上网搜了一下资料,想看看有哪些实现方式,结果发现:

1)同一个ClassLoader加载时,可以根据Class类参数的与指定类的Class类型直接用==相比较:

obj.getClass() == ClassEqualTest.class

既然可以用==符号来判断,当然用equals相比较,肯定也是可以的:

obj.getClass().equals(ClassEqualTest.class)

2)不同的ClassLoader,用==符号判断是不行的。即使是同一个类,表达式的结果也会是false

3)但是不同的ClassLoader加载的同一个类,获取到的Class对象的getName()方法返回的字符串是同一个字符串对象,即用==符号来判断,表达式的结果是true:

MyClassLoader loader = new MyClassLoader();
loader.setRootPath("D://");
Class cls1 = loader.findClass("com.test.A");
Class cls2 = A.class;
System.out.println(cls1.getName()==cls2.getName());

          4)甚至不同ClassLoader各自加载的两个类,只要是jvm相同。仅仅是全限定名相同,而包结构不同(如包数量、其他包的包名不同)、类结构不同(如成员变量数量、成员变量名称、方法签名不同),获取到的Class对象的getName返回值所指向的String实例也是同一个。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值