首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

Java this.getClass() vs getClass():隱式 this 的字節碼差異

     編輯:程式設計疑難解答

代碼對比

// 寫法 1
return getClass().getName();

// 寫法 2
return this.getClass().getName();

運行結果

完全相同。getClass() 是 Object 的 final 方法,**隱式調用者即當前實例 (this)**。

字節碼層面差異

; 寫法 1
ALOAD 0        ; 載入 this
INVOKEVIRTUAL java/lang/Object.getClass ()Ljava/lang/Class;

; 寫法 2
ALOAD 0        ; 載入 this
INVOKEVIRTUAL java/lang/Object.getClass ()Ljava/lang/Class;
; 字節碼完全一致

編譯器自動插入 ALOAD 0 (this),**無任何性能差異**。

編碼風格建議

  • **可省略 this**:簡潔、符合 Java 慣例。
  • **需保留 this** 的場景:
    • 參數/局部變量與成員變量同名:this.name = name;
    • 內部類引用外部類:OuterClass.this.method()
    • 構造函數鏈調用:this(...)

總結

getClass() 與 this.getClass() **語義、字節碼、性能完全等價**。日常編碼**推薦省略 this**,僅在消除歧義時顯式使用。JVM 會自動處理隱式 this。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved