Kotlin中的compareTo和equals有什么区别?

时间:2019-08-29 16:21:23

标签: kotlin

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

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

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

使用compareTo时得到-1。这里没事。 如果字符串不同,也是mentioned in the documentation的结果,我将得到-1

  

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

在使用equals时,我得到的结果是false,然后看起来又像the documentation mentioned一样好-该方法将返回一个布尔值:

  

指示其他某个对象是否“等于”该对象。

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

1 个答案:

答案 0 :(得分:1)

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

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

compareTo继承自Comparable类型,特别是仅意味着其继承者:
布尔,字节,字符,双精度,持续时间,枚举,浮点数,整数等... 将具有该方法。


第二,返回值的签名不同。 Equals返回布尔值,这意味着从方法调用中仅返回truefalse。这只会在没有其他信息的情况下直接告诉您它们是否相同

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

返回一个正整数,该整数表示Receiver的值大于要检查的输入值 为了明确起见,Receiver是正在调用compareTo方法的变量或实例。 例如:

val myValue: Boolean = false
val myCheck: Boolean = true

myValue.compareTo(myCheck) // Return: 1

在该代码中,Receiver将为myValue,因为它正在调用compareTo方法。 Kotlin认为truefalse的值大,因此myValue.compareTo(myCheck) will return 1`

返回0意味着Receiver值与输入参数值相同。

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

负数的返回值是两个值之间的差异的大小,特定于每种类型,基于接收器的值被认为小于输入参数。

val myString = "zza"
val otherString = "zzz"

myString.compareTo(otherString) // Return: -25

等式的解释有些复杂,但是长度相同,只有1个Char位置不同,因此它会将Char值的差值作为Int返回。

val myString = "zz"
val otherString = "zzz"

myString.compareTo(otherString) // Return: -1

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


对于equals,比较他人可以是Any类型,与compareTo中的Receiver类型不同。 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