वे वास्तव में भिन्न हैं जहां आप उन्हें उपयोग कर सकते हैं। 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
पूर्व में आमतौर पर एक आभासी विधि प्रेषण शामिल होता है और इसलिए संभवतः निष्पादित होने में अधिक समय लगता है। हालांकि अंत में जेवीएम पर निर्भर है।
A.class.getClass()
?