在oracle website上的Java API中:“compareTo返回:”如果参数字符串等于此字符串,则值为0;如果此字符串按字典顺序小于字符串参数,则小于0的值;如果此字符串按字典顺序大于字符串参数,则值大于0.“”
这是一个if语句:
String a = "abd";
String b = "abc";
if(a.compareTo(b) >= 1)
返回true 因为字符串a更大,按字典顺序排列。
我的问题是,compareTo总是返回0,1或-1吗?或者它是否返回字符串大于或小于字符串参数的实际金额。
所以在上面的if语句中,由于“abd”大于“abc”,它是否返回1?
答案 0 :(得分:5)
就你而言,没有人知道compareTo
返回值的大小,只是符号。在实践中,大多数compareTo
实现将返回-1,0或1,但合同明确指出正面或负面,您应该相应地编写代码(例如,使用int compare = a.compareTo(b); if(compare > 0) {...} else...
)。
答案 1 :(得分:4)
根据http://docs.oracle.com/javase/6/docs/api/java/lang/String.html#compareTo%28java.lang.String%29
在这种情况下,compareTo返回两个字符串中位置k>的两个字符值的差值 - 即值:
this.charAt(k)-anotherString.charAt(k)
如果没有它们不同的索引位置,那么较短的字符串按字典顺序排在较长的字符串之前。在这种情况下,compareTo返回字符串长度的差异 - 即值:
this.length()-anotherString.length()
对于最后一种情况,对于String
的长度,通过文档似乎可以返回除-1,0,1之外的
答案 2 :(得分:0)
Falmarri完全回答了这个问题;与仅指示返回值为正,负或零的条件相反。
“这是字典顺序的定义。如果两个字符串不同,则它们在某个索引处具有不同的字符(这是两个字符串的有效索引),或者它们的长度不同,或者两者都相同。如果它们具有不同的字符在一个或多个索引位置处,令k为最小的索引;然后,通过使用<运算符确定的,位置k处的字符具有较小值的字符串按字典顺序在另一字符串之前。两个字符串中位置k处的两个字符值中的一个,即值:
this.charAt(k)-anotherString.charAt(k)
如果没有索引位置在它们之间有所不同,则较短的字符串按字典顺序在较长的字符串之前。在这种情况下,compareTo返回字符串长度的差-即值:
this.length()-anotherString.length()“