我想完全理解compareTo
和equals
之间的区别。
我在尝试理解它们之间的区别时使用了以下代码:
println("${'A'.compareTo('b')}")
println("${'A'.equals('b')}")
使用compareTo
时得到-1
。这里没事。
如果字符串不同,也是mentioned in the documentation的结果,我将得到-1
:
将此对象与指定对象进行比较。如果此对象等于指定的其他对象,则返回零;如果小于其他对象,则返回负数;如果大于其他对象,则返回正数。
在使用equals
时,我得到的结果是false
,然后看起来又像the documentation mentioned一样好-该方法将返回一个布尔值:
指示其他某个对象是否“等于”该对象。
也许我遗漏了一些非常简单的东西,但是在所描述的情况下,这些方法之间的区别是什么(除了来自compareTo
和equals
的值)?
答案 0 :(得分:1)
equals和compareTo之间的区别来自几个来源。
首先,equals继承自Kotlin中的Any类型,因此它是该语言中所有值的附加方法。
compareTo继承自Comparable类型,特别是仅意味着其继承者:
布尔,字节,字符,双精度,持续时间,枚举,浮点数,整数等...
将具有该方法。
第二,返回值的签名不同。
Equals返回布尔值,这意味着从方法调用中仅返回true
或false
。这只会在没有其他信息的情况下直接告诉您它们是否相同
compareTo方法的返回值为Int,它是输入类型的比较之间的差的大小。比较不能在不同类型之间进行。
返回一个正整数,该整数表示Receiver的值大于要检查的输入值 为了明确起见,Receiver是正在调用compareTo方法的变量或实例。 例如:
val myValue: Boolean = false
val myCheck: Boolean = true
myValue.compareTo(myCheck) // Return: 1
在该代码中,Receiver将为myValue
,因为它正在调用compareTo方法。 Kotlin认为true
比false
的值大,因此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