在 Kotlin 中,比较和等于有什么区别?

  • 本文关键字:区别 Kotlin 比较 kotlin
  • 更新时间 :
  • 英文 :


我想完全了解compareToequals之间的区别。

我在尝试理解它们之间的区别时使用了这段代码:

println("${'A'.compareTo('b')}")
println("${'A'.equals('b')}")

在使用compareTo时,结果我得到了-1。这里没有错。 文档中还提到,如果字符串不同,我将因此获得-1

将此对象

与指定的对象进行比较以进行排序。如果此对象等于指定的其他对象,则返回零;如果小于其他对象,则返回负数;如果大于其他对象,则返回正数。

在使用equals时,我得到的结果是false,然后它再次看起来不错,如文档所述 - 此方法将返回一个布尔值:

指示某个其他对象是否"等于"此对象。

也许我错过了一些非常简单的东西,但在所描述的情况下,这些方法之间有什么区别(除了来自compareToequals的值(?

equals 和 compareTo 之间的区别来自几个来源.

首先,equals 继承自 Kotlin 中的 Any 类型,因此它是一个附加到语言中所有值的方法。

compareTo 继承自 Comparable 类型,具体是指仅其继承者:
布尔值、字节、字符、双精度、持续时间、枚举、浮点数、Int 等... 将有方法。


其次,返回值的签名不同。 Equals 返回布尔值,这意味着您只有从方法调用返回truefalse。这只会直接告诉您它们是否相同,没有额外的信息

compareTo 方法的返回值为 Int,这是输入类型比较之间的差异大小。比较不能在不同类型之间进行。

接收方值大于要检查的输入值的正整数的返回值 澄清一下,接收器是调用 compareTo 方法的变量或实例。 例如:

val myValue: Boolean = false
val myCheck: Boolean = true
myValue.compareTo(myCheck) // Return: 1

在该代码中,接收器将被myValue,因为它正在调用方法比较。Kotlin 将true解释为比false更大的值,因此myValue.compareTo(myCheck) will return1'

返回0意味着接收器值与输入参数值相同。

val myValue: Boolean = true
val otherValue: Boolean = true
myValue.compareTo(otherValue) // Return: 0

负数的返回是两个值之间的差异量级,特定于基于被视为小于输入参数的 Receiver 值的每种类型。

val myString = "zza"
val otherString = "zzz"
myString.compareTo(otherString) // Return: -25

相等性解释起来有点复杂,但是长度相同,只有 1 个字符的位置不同,它将 Char 值的差异作为 Int 返回。

val myString = "zz"
val otherString = "zzz"
myString.compareTo(otherString) // Return: -1

在这种情况下,差值实际上是 1 个字符的存在,并且没有要分配的值差值。


对于相等,比较的他者可以是任何类型,而不是像比较中那样与接收器的特定类型相同。 equals 方法也是一个运算符函数,可以在语法上使用,例如:

val myString: String = "Hello World"
val otherString: String = "Hello World"
myString == otherString // Return: true

任何非空值都不能等于null

val myString = "Hello World"
val maybeNull: String? = null
myString == maybeNull // Return: false

相等性特定于每种类型,并且有其自己的特定文档来阐明其细微差别:Kotlin Equality

最新更新