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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 新航向 中级黑马   /  2014-8-15 22:56  /  2261 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 新航向 于 2014-8-16 08:14 编辑

"aBcdeFGcd"和"aB"比结果为何为8?   个人理解:由于“aB”双方相同,需要比较第三个字符,应该是"c"和空字符""比较。
  然而根据ASCII表,"c"对应99,根据结果为8计算,与"c"比较的是"["(ASCII值为91),为什么呢?
  1. class StringDemo
  2. {
  3.       public static void main(String[] args)
  4.       {
  5.           String s="  aBcdeFGcds   ";
复制代码





08-15_15.png (132.5 KB, 下载次数: 102)

08-15_15.png

评分

参与人数 1技术分 +1 收起 理由
格子、 + 1 神马都是浮云

查看全部评分

6 个回复

倒序浏览
public int compareTo(String anotherString)按字典顺序比较两个字符串。该比较基于字符串中各个字符的值。

语法:
Str1.compareTo(Str2);

其返回的是一个int类型值。若Str1等于参数字符串Str2字符串,则返回0;若该Str1按字典顺序小于参数字符串Str2,则返回值小于0;若Str1按字典顺序大于参数字符串Str2,则返回值大于0。再不理解的话就试着看源码吧
回复 使用道具 举报
看一看。。。。
回复 使用道具 举报
本帖最后由 新航向 于 2014-8-16 08:14 编辑
hsy 发表于 2014-8-15 23:25
public int compareTo(String anotherString)按字典顺序比较两个字符串。该比较基于字符串中各个字符的值。 ...

知道了,多谢解答
回复 使用道具 举报
根据源码,如果前面部分都相同的话,会返回两者长度之差。
  1.     public int compareTo(String anotherString) {
  2.         int len1 = value.length;
  3.         int len2 = anotherString.value.length;
  4.         int lim = Math.min(len1, len2);
  5.         char v1[] = value;
  6.         char v2[] = anotherString.value;

  7.         int k = 0;
  8.         while (k < lim) {
  9.             char c1 = v1[k];
  10.             char c2 = v2[k];
  11.             if (c1 != c2) {
  12.                 return c1 - c2;
  13.             }
  14.             k++;
  15.         }
  16.         return len1 - len2;
  17.     }
复制代码



评分

参与人数 1技术分 +1 收起 理由
格子、 + 1 神马都是浮云

查看全部评分

回复 使用道具 举报
黎志勇 发表于 2014-8-16 07:54
根据源码,如果前面部分都相同的话,会返回两者长度之差。

哦,原来源码中都写着的。。惭愧惭愧
多谢解答
回复 使用道具 举报
查看一下JDK API 关于 String类的compareTo方法介绍:
如果没有字符不同的索引位置,则较短字符串的字典顺序在较长字符串之前。在这种情况下,compareTo 返回这两个字符串长度的差,即值:
this.length()-anotherString.length()
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马