亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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

賦值不返回 void

賦值不返回 void

HUH函數 2021-10-20 16:01:23
我在Google Guava Github上找到了這段代碼,我無法弄清楚為什么在第 5 行,rowMap如果條件滿足,該方法不返回 void:private transient @MonotonicNonNull Map<R, Map<C, V>> rowMap;public Map<R, Map<C, V>> rowMap() {  Map<R, Map<C, V>> result = rowMap;  return (result == null) ? rowMap = createRowMap() : result;}Map<R, Map<C, V>> createRowMap() {  return new RowMap();}這條線不會等同于:if (result == null) {  return rowMap = createRowMap();} else {  return result;}然后對 rowMap 的賦值將返回 void。我錯過了什么?
查看完整描述

2 回答

?
慕蓋茨4494581

TA貢獻1850條經驗 獲得超11個贊

我錯過了什么?


賦值表達式的結果就是被賦值的值。:-) 所以在該代碼中,調用的結果createRowMap被分配給rowMap 并作為rowMap函數的結果返回。就像:


a = b = 42;

...設置b為42然后設置a為42(b = 42賦值的結果)。


效果就像代碼是這樣寫的一樣:


public Map<R, Map<C, V>> rowMap() {

  Map<R, Map<C, V>> result = rowMap;

  if (result != null) {

    return result;

  }

  rowMap = createRowMap();

  return rowMap;

}


查看完整回答
反對 回復 2021-10-20
?
MMTTMM

TA貢獻1869條經驗 獲得超4個贊

賦值表達式的求值結果varibale = value是value,試試:


int a;

System.out.println(a = 1); // 1

所以它等于:


if (result == null) {

    rowMap = createRowMap();

    return rowMap;

}

查看 jls 了解更多:


當程序中的表達式被評估(執行)時,結果表示以下三件事之一:


變量(第 4.12 節)(在 C 中,這將稱為左值)


一個值(第 4.2、第 4.3 節)


無(該表達式被稱為無效)


...


當且僅當它是調用不返回值的方法的方法調用(第 15.12 節),即聲明為 void 的方法(第 8.4 節)時,表達式不表示任何內容。


查看完整回答
反對 回復 2021-10-20
  • 2 回答
  • 0 關注
  • 181 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號