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

Java 匿名內部類與基本類型包裝類的區別解析

     編輯:程式設計綜合問答

問題核心

private OnClickListener myButton = new OnClickListener(){}; 為何是內部類?
Integer i = new Integer(10); 為何是對象聲明?

匿名內部類本質

new OnClickListener() {
    @Override
    public void onClick(View v) { /* 實現 */ }
};
  • 編譯後生成 OuterClass$1.class,是獨立的 class 文件。
  • 隱式持有外部類引用(非 static 內部類),可訪問外部 final 或效果上 final 的變量。
  • 本質是「實現接口/繼承類」的一次性子類,屬於語法糖。

包裝類對象聲明

Integer i = new Integer(10); // 或 Integer i = 10; (自動裝箱)
  • Integer 是 int 的引用類型包裝,繼承 Number,實現 Comparable。
  • 創建的是堆上對象,有對象頭、字段 value、方法(intValue() 等)。
  • 非內部類,而是獨立頂層類 java.lang.Integer 的實例。

對比總結表

特性匿名內部類包裝類對象
生成類文件Outer$1.class 等無新類,用現成 Integer.class
繼承關係實現接口/繼承指定類繼承 Number
外部引用隱式持有(非 static)無
用途事件回調、策略模式等基本類型對象化、集合存儲

記憶口訣

「new 接口() { } 是內部類,編譯另生 class;
new Integer() 是包裝對象,基本變引用。」

理解兩者本質區別,有助於正確使用匿名內部類處理回調,並合理利用包裝類進行泛型編程。

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