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

时间:2019-08-28 11:20:16

标签: kotlin

Why is res1 and res2 different?

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

1 个答案:

答案 0 :(得分:5)

val res1 = bool ?: a == b 

相同
val res1 = (bool ?: a) == b

bool不是null(它是true),所以(bool?:a)返回true,而true == bfalse,结果存储在res1中。

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

您可以在https://kotlinlang.org/docs/reference/grammar.html#expressions上进行查找 如果平等(==的优先级高于猫王(?:),那将是您的预期结果。