簡體   English   中英

為什么必須在最終聲明中聲明列表

[英]Why the list must be declare by final

TIntArrayList list = new TIntArrayList();
final TIntArrayList tempList = new TIntArrayList();
list.add(10086);
list.add(12345);
list.add(1989);
list.forEach(new TIntProcedure() {
    @Override
    public boolean execute(int i) {
        if (i > 10086) {
            tempList.add(i);
        }
        return true;
    }
});

我使用intellij,它提示我用final聲明tempList,為什么tempList必須用final聲明?

“ tempList”的范圍在方法內。 該方法完成后,“ tempList”將最終丟失。 但是,您編寫的匿名類可能仍在堆上,以后可以引用。 將其設置為最終將確保匿名類仍將按預期運行。

這是因為虛擬機的工作方式。

首先,要了解這一點,您需要知道內部堆棧和堆棧框架是什么(在虛擬機內部)

局部變量(基元和引用)都存儲在方法的堆棧框架中,其他方法不可訪問。

在您的情況下,局部變量tempListboolean execute(int i)方法中不可訪問,因為它“屬於”封裝方法(它“存在”於本地堆棧幀中)。

但是,為了使其可訪問,您可以將變量聲明為final,這樣可以將它內部放置在方法的“外部”,就像它是私有實例變量一樣,以便可以由execute()和其他方法訪問。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM