A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© @ne_pie尒ce 中级黑马   /  2013-11-20 19:51  /  1453 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

      String s1="";
      String s2="a";
      String s3="b";
      String s4="ab";
      int i1=s1.compareTo(s2);
      int i2=s2.compareTo(s3);
      int i3=s3.compareTo(s4);
      System.out.println(i1);
      System.out.println(i2);
      System.out.println(i3);
这里有空字符串与单个字符串是怎么比较的,
单个字符的字符串是怎么比较的,
单字符字符串与多字符字符串又是怎么比较的

评分

参与人数 1技术分 +1 收起 理由
To + 1

查看全部评分

3 个回复

倒序浏览
看一看下面的CompareTo方法的实现代码,你就明白内部比较是什么机制了
  1.     public int compareTo(String anotherString) {
  2.         int len1 = count;
  3.         int len2 = anotherString.count;
  4.         int n = Math.min(len1, len2);
  5.         char v1[] = value;
  6.         char v2[] = anotherString.value;
  7.         int i = offset;
  8.         int j = anotherString.offset;

  9.         if (i == j) {
  10.             int k = i;
  11.             int lim = n + i;
  12.             while (k < lim) {
  13.                 char c1 = v1[k];
  14.                 char c2 = v2[k];
  15.                 if (c1 != c2) {
  16.                     return c1 - c2;
  17.                 }
  18.                 k++;
  19.             }
  20.         } else {
  21.             while (n-- != 0) {
  22.                 char c1 = v1[i++];
  23.                 char c2 = v2[j++];
  24.                 if (c1 != c2) {
  25.                     return c1 - c2;
  26.                 }
  27.             }
  28.         }
  29.         return len1 - len2;
  30.     }
复制代码
回复 使用道具 举报
要弄明白compareto的比较机制

compareTo()的返回值是整型,它是先比较对应字符的大小(ASCII码顺序),如果第一个字符和参数的第一个字符不等,结束比较,返回他们之间的

差值,如果第一个字符和参数的第一个字符相等,则以第二个字符和参数的第二个字符做比较,以此类推,直至比较的字符或被比较的字符有一方

全比较完,这时就比较字符的长度.

例:
String s1 = "abc";
String s2 = "abcd";
String s3 = "abcdfg";
String s4 = "1bcdfg";
String s5 = "cdfg";
System.out.println( s1.compareTo(s2) ); // -1 (前面相等,s1长度小1)
System.out.println( s1.compareTo(s3) ); // -3 (前面相等,s1长度小3)
System.out.println( s1.compareTo(s4) ); // 48 ("a"的ASCII码是97,"1"的的ASCII码是49,所以返回48)
System.out.println( s1.compareTo(s5) ); // -2 ("a"的ASCII码是97,"c"的ASCII码是99,所以返回-2)

s1.compareTo(s1.intValue())>0;//此方法判断是否为整型

评分

参与人数 1技术分 +1 收起 理由
To + 1

查看全部评分

回复 使用道具 举报
Stirng的compareTo()方法是这样比较的:
从两个字符串的0位置开始比较:
(1) 如果两个字符串上第一个位置的字符不相等,
      那么就不再进行比较,这两个字符串肯定不相等。
(2)如果两个字符串上第一个位置的字符相当,
      那么就接着找他们各自的第二字字符,如此直到最后一个字符都相等,那么这两个字符串就相等。
      如果中间有一个字符不相等,那么后面的字符都不会再进行比较,结果也就是这两个字符串不相等。
(3)如果两个字符串长度不一样,但是短的字符串和长字符串的前半部完全一样,
      那么长字符串取下一个字符时短字符串没有可取的字符,那么他们肯定就不相等。

这三种情况就可以说明你问的问题了~~

评分

参与人数 1技术分 +1 收起 理由
To + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马