猫王算子的行为?:在科特林

bhk*_*ran 1 kotlin

为什么res1和res2不同?

为什么res1和res2不同?唯一的区别是有一个封闭的支架。

Sim*_*ant 5

val res1 = bool ?: a == b 
Run Code Online (Sandbox Code Playgroud)

是相同的

val res1 = (bool ?: a) == b
Run Code Online (Sandbox Code Playgroud)

bool是不是null(这是true),所以(布尔:a)返回true,并true == bfalse,存储在RES1结果。

这是因为?:将左侧绑定到其右侧的第一个可能参数,这仅仅是a(而非a == b您所期望的)参数。

如果Equality()的优先级高于Elvis()的优先级,那么您可以在https://kotlinlang.org/docs/reference/grammar.html#expressions上查找,这将是您期望的结果。==?: