CompareTo函数在Java中的这种情况下做了什么

时间:2017-06-18 19:58:57

标签: java compare compareto

public static void main(String[] args) {
     System.out.print("Comparing \"axe\" with \"dog\" produces ");
     // I don't understand what this does.
     int i = "axe".compareTo("dog");
     System.out.println(i);

     System.out.print("Comparing \"applebee's\" with \"apple\" produces ");
     // neither this.
     System.out.println( "applebee's".compareTo("apple") );


}

当我运行代码时,它出现-3,下一个是5, 我不明白你如何比较字母和数字。 “applebee”和“dog”甚至不是字符串变量 这是在this链接

的学校作业

3 个答案:

答案 0 :(得分:2)

在练习之前,我的建议是阅读文档。在这种情况下,Oracle参考清楚地解释了正数和负数的原因:

  

按字典顺序比较两个字符串。比较基于字符串中每个字符的Unicode值。此String对象表示的字符序列按字典顺序与参数字符串表示的字符序列进行比较。如果此String对象按字典顺序位于参数字符串之前,则结果为负整数。如果此String对象按字典顺序跟随参数字符串,则结果为正整数。如果字符串相等,结果为零; compareTo恰好在equals(Object)方法返回true时返回0。

这里解释了为什么 - 3 和+ 5

  

这是词典排序的定义。如果两个字符串不同,则它们在某个索引处具有不同的字符,这两个字符串是两个字符串的有效索引,或者它们的长度不同,或两者都有。如果它们在一个或多个索引位置具有不同的字符,则令k为最小的索引;然后,通过使用<来确定位置k处的字符具有较小值的字符串。运算符,按字典顺序排在另一个字符串之前。在这种情况下,compareTo返回两个字符串中位置k处两个字符值的差值 - 即值:

this.charAt(k)-anotherString.charAt(k)
  

如果没有它们不同的索引位置,则更短   字符串按字典顺序排在较长的字符串之前。在这种情况下,   compareTo返回字符串长度的差异   是,值:

this.length()-anotherString.length()

答案 1 :(得分:1)

Java String类提供.compareTo ()方法,以便按字典顺序比较字符串。

此方法的返回值为int,可解释如下:

  • 返回< 0然后调用该方法的String首先按字典顺序排列(首先出现在字典中)
  • 返回== 0,然后两个字符串按字典顺序等效
  • 返回> 0,然后传递给compareTo方法的参数首先按字典顺序排列。

在你的例子中:

"axe".compareTo("dog")返回-3因为axe按字典顺序排在字典中。

它以每个字符串的第一个字符开头:a在字典中d之前。如果比较的字符在字典上等效 它会转到字符串中的下一个字符来比较它们等等。

 "applebee's".compareTo("apple") 

第一个字符串"apple"中的前5个字符在字典上与第二个字符串等效,但字符bee's位于第二个字符串之后,因此它将返回5,大于{{1}因为第二个字符串在字典中排在第一位。

答案 2 :(得分:0)

compareTo返回的特定数字是您应该不关心的实施细节。 compareTo的文档指出您应该关注的是符号:数字为负数(a.compareTo(b) < 0隐含a < b),零(a.compareTo(b)隐含a等于b)或正数(a.compareTo(b) > 0暗示a > b)。