关于String类compareTo方法返回值的理解疑问
为什么
"bc".compareTo("bb")返回1而不是-1? 嘿,我来帮你理清这个误区!你搞反了compareTo()方法的返回逻辑啦😉
首先得明确Java里String.compareTo()的核心规则:它是按Unicode字符值的字典序来比较两个字符串,返回的是两个字符串中第一个不同字符的Unicode值之差,具体逻辑是:
- 如果当前字符串(调用方法的那个)比参数字符串大,返回正数
- 如果当前字符串比参数字符串小,返回负数
- 完全相等则返回0
回到你的例子:
你定义的s1 = "bc",s2 = "bb",我们逐字符拆解比较:
- 第一个字符都是
'b',Unicode值都是98,完全相同,所以继续对比下一个字符 - 第二个字符:s1的是
'c'(Unicode值99),s2的是'b'(Unicode值98) - 计算差值:
99 - 98 = 1,这就是s1.compareTo(s2)返回1的原因
你之前的理解误区在于:你觉得"c在b之后"所以s1更小,但实际上字典序里,字符越靠后,对应的字符串越大。"bc"比"bb"大,因为第二个字符c的排序在b之后,所以用s1去和s2比较时,会返回正数。
举个反向例子验证:如果执行System.out.println(s2.compareTo(s1));,结果就会是-1,因为此时是用s2("bb")去比s1("bc"),第二个字符b的Unicode值减去c的,得到-1。
内容的提问来源于stack exchange,提问作者JcodingW
相关产品推荐
相关产品推荐

