我想完全了解compareTo
和equals
之间的区别。
我在尝试理解它们之间的区别时使用了这段代码:
println("${'A'.compareTo('b')}")
println("${'A'.equals('b')}")
在使用compareTo
时,结果我得到了-1
。这里没有错。 文档中还提到,如果字符串不同,我将因此获得-1
:
与指定的对象进行比较以进行排序。如果此对象等于指定的其他对象,则返回零;如果小于其他对象,则返回负数;如果大于其他对象,则返回正数。
在使用equals
时,我得到的结果是false
,然后它再次看起来不错,如文档所述 - 此方法将返回一个布尔值:
指示某个其他对象是否"等于"此对象。
也许我错过了一些非常简单的东西,但在所描述的情况下,这些方法之间有什么区别(除了来自compareTo
和equals
的值(?
equals 和 compareTo 之间的区别来自几个来源.
首先,equals 继承自 Kotlin 中的 Any 类型,因此它是一个附加到语言中所有值的方法。
compareTo 继承自 Comparable 类型,具体是指仅其继承者:
布尔值、字节、字符、双精度、持续时间、枚举、浮点数、Int 等... 将有方法。
其次,返回值的签名不同。 Equals 返回布尔值,这意味着您只有从方法调用返回true
或false
。这只会直接告诉您它们是否相同,没有额外的信息
compareTo 方法的返回值为 Int,这是输入类型比较之间的差异大小。比较不能在不同类型之间进行。
接收方值大于要检查的输入值的正整数的返回值 澄清一下,接收器是调用 compareTo 方法的变量或实例。 例如:
val myValue: Boolean = false
val myCheck: Boolean = true
myValue.compareTo(myCheck) // Return: 1
在该代码中,接收器将被myValue
,因为它正在调用方法比较。Kotlin 将true
解释为比false
更大的值,因此myValue.compareTo(myCheck) will return
1'
返回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