จริงๆแล้วมันแตกต่างกันไปตามที่ที่คุณสามารถใช้ได้ A.classทำงานในเวลาคอมไพล์ในขณะที่a.getClass()ต้องการอินสแตนซ์ประเภทAและทำงานที่รันไทม์
อาจมีความแตกต่างด้านประสิทธิภาพเช่นกัน ในขณะA.classที่คอมไพลเลอร์สามารถแก้ไขได้เนื่องจากทราบชนิดที่แท้จริงAแต่a.getClass()เป็นการเรียกใช้เมธอดเสมือนที่เกิดขึ้นที่รันไทม์
สำหรับการอ้างอิงโดยทั่วไปคอมไพลเลอร์กำหนดเป้าหมาย bytecode จะแสดงคำแนะนำต่อไปนี้สำหรับ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
A.class.getClass()?