为什么在 Kotlin 中 "".equals(1) 有效而 "" == 1 无效?

问题描述 投票:0回答:1

我目前正在学习 Kotlin,遇到了一个令我困惑的行为。这是让我困惑的两行代码:

"".equals(1) // not compile error
"" == 1 // compile error

"".equals(1)
- 此行编译并运行没有任何问题。

"" == 1
- 但是,此行会导致编译时错误。

根据我的理解,在Kotlin中,

==
运算符被翻译为对equals方法的调用。所以我很好奇为什么第一个语句被认为是有效的,而第二个语句则不是,尽管两者似乎都试图在 String 和 Int 之间进行相同的比较。

有人可以解释一下 Kotlin 中使第一个语句编译并运行而不是第二个语句的底层机制吗?

kotlin equality
1个回答
0
投票

来自文档

Kotlin 检查值相等运算符的适用性 编译时,可能会拒绝 A 和 B 的某些类型组合。 具体来说,它使用以下基本原理。

如果 A 的类型和 B 的类型绝对不同并且不通过子类型相关,则 A == B 是无效表达式,并且应该导致 编译时错误。

非正式地说:这个原则意味着“任何两个通过子类型无关的对象都不能被认为是相等的 ==”。

因此,由于

""
1
与子类型无关,Kotlin 认为您在编写此表达式时可能犯了一个错误,并且它会因编译时错误而中止。此检查不适用于
equals

© www.soinside.com 2019 - 2024. All rights reserved.