猿问

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

在Java中,围绕使用a.getClass()或选择存在哪些利弊A.class?可以在Class<?>预期的任何地方使用这两种方法,但是我想在不同的情况下使用这两种方法会带来性能或其他微妙的好处(就像with Class.forName()和和一样)ClassLoader.loadClass()


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

德玛西亚99
浏览 559回答 4
4回答

守着一只汪

我不会在优点/缺点方面进行比较,因为它们具有不同的目的,并且很少在两者之间做出选择。a.getClass()返回运行时类型的a。也就是说,如果你有A a = new B();那么a.getClass()将返回B类。A.class静态地评估A该类,并用于通常与反射相关的其他目的。在性能方面,可能会有可测量的差异,但是我不会在此赘述,因为最终它取决于JVM和/或编译器。

哔哔one

实际上,它们在何处可以使用方面有所不同。A.class在编译时工作,而a.getClass()需要一个类型的实例,A并在运行时工作。性能可能也会有所不同。虽然A.class可以由编译器解决,因为它知道的实际类型A,这a.getClass()是在运行时发生的虚拟方法调用。作为参考,针对字节码的编译器通常针对以下问题发出以下指令Integer.getClass():aload_1invokevirtual&nbsp; &nbsp;#3; //Method java/lang/Object.getClass:()Ljava/lang/Class;和以下内容Integer.class://const #3 = class&nbsp; #16;&nbsp; &nbsp; //&nbsp; java/lang/Integerldc_w&nbsp; &nbsp;#3; //class java/lang/Integer前者通常会涉及虚拟方法的分派,因此大概需要更长的时间才能执行。最终这取决于JVM。

四季花海

使用a.getClass时,你有类/类型的实例,你想获得它的确切类型。while a.class在type可用并要创建实例时使用。在编译时求值时,还getClass()返回实例的运行时类型.class。考虑到性能getClass()和.class,.class具有比更好的性能 getClass() 。范例:public class PerfomanceClass {&nbsp; &nbsp; public static void main(String[] args) {&nbsp; &nbsp; &nbsp; &nbsp; // TODO Auto-generated method stub&nbsp; &nbsp; &nbsp; &nbsp; long time=System.nanoTime();&nbsp; &nbsp; &nbsp; &nbsp; Class class1="String".getClass();&nbsp; &nbsp; &nbsp; &nbsp; class1="String".getClass();&nbsp; &nbsp; &nbsp; &nbsp; class1="String".getClass();&nbsp; &nbsp; &nbsp; &nbsp; class1="String".getClass();&nbsp; &nbsp; &nbsp; &nbsp; System.out.println("time (getClass()) :"+(System.nanoTime()-time)+" ns");&nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; long time2=System.nanoTime();&nbsp; &nbsp; &nbsp; &nbsp; Class class2=String.class;&nbsp; &nbsp; &nbsp; &nbsp; class2=String.class;&nbsp; &nbsp; &nbsp; &nbsp; class2=String.class;&nbsp; &nbsp; &nbsp; &nbsp; class2=String.class;&nbsp; &nbsp; &nbsp; &nbsp; System.out.println("time (.class):"+(System.nanoTime()-time2)+" ns");&nbsp; &nbsp; }}输出:time (getClass()) : 79410 nstime (.class)&nbsp; &nbsp; &nbsp;: 8032 ns
随时随地看视频慕课网APP

相关分类

Java
我要回答