第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Java雙括號初始化與lambda

Java雙括號初始化與lambda

紫衣仙女 2022-10-20 17:00:33
如果您搜索“java 雙括號”,您會發(fā)現(xiàn)反對使用它的有力論據(jù)。每次有人使用雙括號初始化時,都會殺死一只小貓。 https://stackoverflow.com/a/27521360/555631論點是您創(chuàng)建了太多匿名類,并且您可能會造成內(nèi)存泄漏。lambdas有什么不同嗎?他們每個人都創(chuàng)建了一個匿名內(nèi)部類,他們每個人都引用了它們的封閉閉包。
查看完整描述

2 回答

?
飲歌長嘯

TA貢獻1951條經(jīng)驗 獲得超3個贊

Lambda 表達式不同于碰巧實現(xiàn)函數(shù)式接口的匿名內(nèi)部類。

匿名內(nèi)部類將在編譯時創(chuàng)建自己的類文件Foo$1.class,如果它包含在Foo類中,通常類似于 。它是實現(xiàn)接口或子類的全功能類。要在其范圍之外引用本地值,它將在幕后在匿名內(nèi)部類中創(chuàng)建一個實例變量,該變量表示該值的副本。這就是為什么變量必須是有效的最終變量——否則實際變量可能會改變并且副本可能是陳舊的。

Lambda 表達式不創(chuàng)建匿名內(nèi)部類。他們使用 ajava.lang.invoke.LambdaMetafactory來生成 a CallSite,稍后可以使用它來執(zhí)行 lambda 表達式。lambda 表達式,無論是塊還是表達式,都被轉(zhuǎn)換為包含它的類中的隱藏私有靜態(tài)方法。不是創(chuàng)建具有隱藏變量的類,而是將捕獲的值轉(zhuǎn)換為隱藏的私有靜態(tài)方法的參數(shù)。局部值仍然必須是有效的最終值,因為傳遞給方法的值又是一個副本。invokedynamic該方法由JVM 中的指令調(diào)用。


查看完整回答
反對 回復(fù) 2022-10-20
?
Smart貓小萌

TA貢獻1911條經(jīng)驗 獲得超7個贊

是的,它們是不同的。

  • Lambda 實際上并不一定要創(chuàng)建匿名類——它們當(dāng)然不只是被翻譯成等效的匿名類。它們的創(chuàng)建比這要復(fù)雜得多,并且通常以在運行時創(chuàng)建的匿名類結(jié)束,但不一定。

  • Lambda 不捕獲除了其中特別提到的變量之外的任何內(nèi)容,這與匿名內(nèi)部類不同,如果它們是在實例方法中定義的,則會捕獲封閉的類對象。


查看完整回答
反對 回復(fù) 2022-10-20
  • 2 回答
  • 0 關(guān)注
  • 146 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號