赋值不返回 void

我在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。我错过了什么?


HUH函数
浏览 164回答 2
2回答

慕盖茨4494581

我错过了什么?赋值表达式的结果就是被赋值的值。:-) 所以在该代码中,调用的结果createRowMap被分配给rowMap 并作为rowMap函数的结果返回。就像:a = b = 42;...设置b为42然后设置a为42(b = 42赋值的结果)。效果就像代码是这样写的一样:public Map<R, Map<C, V>> rowMap() {&nbsp; Map<R, Map<C, V>> result = rowMap;&nbsp; if (result != null) {&nbsp; &nbsp; return result;&nbsp; }&nbsp; rowMap = createRowMap();&nbsp; return rowMap;}

MMTTMM

赋值表达式的求值结果varibale = value是value,试试:int a;System.out.println(a = 1); // 1所以它等于:if (result == null) {&nbsp; &nbsp; rowMap = createRowMap();&nbsp; &nbsp; return rowMap;}查看 jls 了解更多:当程序中的表达式被评估(执行)时,结果表示以下三件事之一:变量(第 4.12 节)(在 C 中,这将称为左值)一个值(第 4.2、第 4.3 节)无(该表达式被称为无效)...当且仅当它是调用不返回值的方法的方法调用(第 15.12 节),即声明为 void 的方法(第 8.4 节)时,表达式不表示任何内容。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java