我目前正在学习 Kotlin,遇到了一种令我困惑的行为。这是让我困惑的两行代码:
"".equals(1) // not compile error
"" == 1 // compile error
Run Code Online (Sandbox Code Playgroud)
"".equals(1)- 此行编译并运行没有任何问题。
"" == 1- 但是,该行会导致编译时错误。
据我了解,在 Kotlin 中,==运算符被翻译为对 equals 方法的调用。所以我很好奇为什么第一个语句被认为是有效的,而第二个语句则不是,尽管两者似乎都试图在 String 和 Int 之间进行相同的比较。
有人可以解释一下 Kotlin 中使第一个语句编译并运行而不是第二个语句的底层机制吗?
==通常最终会调用equals,但它并不完全等效。其中一个不等价点是编译时类型检查,旨在捕获简单的错误。来自文档:
\n\nKotlin 在编译时检查值相等运算符的适用性,并可能拒绝 A 和 B 的某些类型组合。具体来说,它使用以下基本原则。
\n\n\n如果 A 的类型和 B 的类型明确不同并且不通过子类型相关,则 A == B 是无效表达式,并且应该导致\n编译时错误。
\n\n\n非正式地:这个原则意味着 \xe2\x80\x9c 两个与子类型无关的对象不能被 ==\xe2\x80\x9d 认为相等。
\n
因此,由于""和 与1子类型无关,Kotlin 认为您在编写此表达式时可能犯了一个错误,并且它会因编译时错误而中止。此检查不适用于equals.
| 归档时间: |
|
| 查看次数: |
135 次 |
| 最近记录: |