kotlin中“&&”和“and”的区别

AT *_*ani 16 android logical-operators kotlin logical-and

kotlin中“&&”和“and”有什么区别?

在我的代码中,当第一个条件为假时,我注意到“and”之后的条件仍然被评估,但在“&&”情况下不被评估。这是为什么?

And*_*erd 26

您自己回答了这个问题 - 如果您使用,and那么您将评估整个表达式。

https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/and.html

在回答为什么发生这种情况的问题时,这是因为它and不是一个运算符,而是类型上的一个中缀函数Bool。短路是适用于布尔运算符而不是函数调用的编译器规则。

那么这个and功能为什么有用呢?在某些情况下,调用右侧表达式可能会产生副作用,并且您希望无论左侧表达式如何,这些副作用都会发生。

if (!(saveToDatabase() and writeToNoficationQueue())) {
     print("At least one thing went wrong there. Check the logs to find out.")
}
Run Code Online (Sandbox Code Playgroud)

  • @TiebeGroosman澄清一下:应用于 Int 类型时是按位运算,应用于 Bool 类型时是逻辑运算。https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/and.html https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/and.html (2认同)