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

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

java中Integer、AtomicInteger的區(qū)別

java中Integer、AtomicInteger的區(qū)別

拉莫斯之舞 2024-01-05 16:17:52
當(dāng)我使用 java 的可選類時(shí),如下所示Integer total = null;Optional<Integer> b = Optional.of(new Integer(10));b.ifPresent(b -> total =b);上面的代碼不起作用(錯(cuò)誤:java:從 lambda 表達(dá)式引用的局部變量必須是最終的或有效的最終),但是,當(dāng)我使用 AtomicInteger 時(shí),它將起作用。為什么會(huì)出現(xiàn)這種情況?Optional<Integer> b = Optional.of(new Integer(10));AtomicInteger total = new AtomicInteger();b.ifPresent(b -> total.set(b));
查看完整描述

4 回答

?
翻過(guò)高山走不出你

TA貢獻(xiàn)1875條經(jīng)驗(yàn) 獲得超3個(gè)贊

你可以這樣做:

Integer total = Optional.of(new Integer(10)).orElse(null);

如果該Optional值可以為空,則:

Integer total = Optional.ofNullable(new Integer(10)).orElse(null);

Optional.ofNullable在有值的情況下會(huì)防止NPEnull。

在第一個(gè)示例中出現(xiàn)此錯(cuò)誤的原因是,在 lambda 表達(dá)式中,不允許更改局部變量的引用。這就是為什么它們需要被宣布final或?qū)嶋H上是最終的。

第二個(gè)示例之所以有效,是因?yàn)檫@里您沒(méi)有更改total變量的引用。您只是使用其set()方法更新其值。


查看完整回答
反對(duì) 回復(fù) 2024-01-05
?
弒天下

TA貢獻(xiàn)1818條經(jīng)驗(yàn) 獲得超8個(gè)贊

在這種情況下,您不僅觀察到兩個(gè)類之間的差異,而且觀察到使用它們的方式的差異。

b.ifPresent(b -> total =b);

這嘗試將一個(gè)新的Integer引用(對(duì)不同對(duì)象的引用)分配給bIntegerAtomicInteger任何其他類型都不允許這樣做。

b.ifPresent(b -> total.set(b));

set這會(huì)調(diào)用現(xiàn)有對(duì)象中的方法 ( ) AtomicIntegerInteger以及 AtomicInteger所有其他類都允許從 lambda 內(nèi)部調(diào)用方法。不過(guò),對(duì)于您的用例來(lái)說(shuō),一個(gè)重要的區(qū)別是,Integer由于類是不可變的,因此沒(méi)有一種允許您更改值的方法。


查看完整回答
反對(duì) 回復(fù) 2024-01-05
?
UYOU

TA貢獻(xiàn)1878條經(jīng)驗(yàn) 獲得超4個(gè)贊

他們的行為有所不同,因?yàn)槟阏谧鰞杉耆煌氖虑椤?/p>

在你的第一個(gè):

b.ifPresent(b -> total =b);

變量“total”代表您要更改其值的內(nèi)存區(qū)域。這是不允許的。

在第二 :

b.ifPresent(b -> total.set(b));

變量“total”表示內(nèi)存中引用(或指向)AtomicInteger 類實(shí)例的區(qū)域。您沒(méi)有更改該變量,而只是調(diào)用它的方法。由于“總計(jì)”本身沒(méi)有變化,所以這就是所謂的“有效最終”,因此是允許的。


查看完整回答
反對(duì) 回復(fù) 2024-01-05
?
達(dá)令說(shuō)

TA貢獻(xiàn)1821條經(jīng)驗(yàn) 獲得超6個(gè)贊

Integer您詢問(wèn)為什么和的行為AtomicInteger在您的情況下有所不同。究其原因,確實(shí)無(wú)關(guān)AtomicInteger。相反,區(qū)別在于它Integer是不可變的,因此,更改對(duì) an 的引用的值的唯一方法Integer是通過(guò)賦值。但 lambda 表達(dá)式不允許對(duì)表達(dá)式范圍之外的局部變量進(jìn)行賦值。

有多種方法可以在不使用的情況下解決此問(wèn)題AtomicInteger

  1. 創(chuàng)建您自己的MutableInteger,可以在 lambda 內(nèi)部設(shè)置

  2. 使Integer對(duì)象變量而不是局部變量

  3. 使用orElse或各種替代方法返回值而不是將其設(shè)置在內(nèi)部ifPresent

另請(qǐng)注意,您可能會(huì)考慮OptionalInt而不是Optional<Integer>.


查看完整回答
反對(duì) 回復(fù) 2024-01-05
  • 4 回答
  • 0 關(guān)注
  • 314 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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