为了账号安全,请及时绑定邮箱和手机立即绑定

Java中的a.getClass()和A.class有什么区别?

Java中的a.getClass()和A.class有什么区别?

德玛西亚99 2019-12-16 09:58:24
在Java中,围绕使用a.getClass()或选择存在哪些利弊A.class?可以在Class<?>预期的任何地方使用这两种方法,但是我想在不同的情况下使用这两种方法会带来性能或其他微妙的好处(就像with Class.forName()和和一样)ClassLoader.loadClass()。Java中的a.getClass()和A.class有什么区别?
查看完整描述

4 回答

?
守着一只汪

TA贡献1872条经验 获得超3个赞

我不会在优点/缺点方面进行比较,因为它们具有不同的目的,并且很少在两者之间做出选择。


a.getClass()返回运行时类型的a。也就是说,如果你有A a = new B();那么a.getClass()将返回B类。


A.class静态地评估A该类,并用于通常与反射相关的其他目的。


在性能方面,可能会有可测量的差异,但是我不会在此赘述,因为最终它取决于JVM和/或编译器。



查看完整回答
反对 回复 2019-12-16
?
哔哔one

TA贡献1854条经验 获得超8个赞

实际上,它们在何处可以使用方面有所不同。A.class在编译时工作,而a.getClass()需要一个类型的实例,A并在运行时工作。


性能可能也会有所不同。虽然A.class可以由编译器解决,因为它知道的实际类型A,这a.getClass()是在运行时发生的虚拟方法调用。


作为参考,针对字节码的编译器通常针对以下问题发出以下指令Integer.getClass():


aload_1

invokevirtual   #3; //Method java/lang/Object.getClass:()Ljava/lang/Class;

和以下内容Integer.class:


//const #3 = class  #16;    //  java/lang/Integer


ldc_w   #3; //class java/lang/Integer

前者通常会涉及虚拟方法的分派,因此大概需要更长的时间才能执行。最终这取决于JVM。


查看完整回答
反对 回复 2019-12-16
?
四季花海

TA贡献1811条经验 获得超5个赞

使用a.getClass时,你有类/类型的实例,你想获得它的确切类型。while a.class在type可用并要创建实例时使用。在编译时求值时,

还getClass()返回实例的运行时类型.class。

考虑到性能getClass()和.class,.class具有比更好的性能 getClass() 。

范例:


public class PerfomanceClass {


    public static void main(String[] args) {

        // TODO Auto-generated method stub


        long time=System.nanoTime();

        Class class1="String".getClass();

        class1="String".getClass();

        class1="String".getClass();

        class1="String".getClass();


        System.out.println("time (getClass()) :"+(System.nanoTime()-time)+" ns");     



        long time2=System.nanoTime();

        Class class2=String.class;

        class2=String.class;

        class2=String.class;

        class2=String.class;


        System.out.println("time (.class):"+(System.nanoTime()-time2)+" ns");

    }


}

输出:


time (getClass()) : 79410 ns

time (.class)     : 8032 ns


查看完整回答
反对 回复 2019-12-16
  • 4 回答
  • 0 关注
  • 558 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信