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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© --_.Is’攸稀 中级黑马   /  2013-12-13 13:26  /  1516 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 --_.Is’攸稀 于 2013-12-13 16:04 编辑

知道compareTo()方法是按字典顺序比较两个字符串,它返回的值有什么规律吗?(知道会返回正整数或负整数)
我的这段代码为什么返回的值是32?--不是其他的正整数?
  1. class StringDemo
  2. {
  3.         public static void main(String[] args)
  4.                 {
  5.                        String str=new String("java project");
  6. String str2 ="Java project";
  7.                         tool.pri(str.compareTo(str2));
  8. }
  9. }
  10. class tool
  11. {
  12.         public static void pri(Object obj)
  13.                 {
  14.                         System.out.println(obj);
  15.                 }
  16. }
复制代码


评分

参与人数 2技术分 +2 收起 理由
简★零度 + 1
乔兵 + 1

查看全部评分

8 个回复

正序浏览
回音 发表于 2013-12-13 13:36
它从第一位开始比较,如果遇到不同的字符,则马上返回这两个字符的ascii值差值,返回值是int类型。同一字母的 ...

哦~懂了~是返回差值~
回复 使用道具 举报
ixiangfeng 发表于 2013-12-13 14:12
这问题老毕不是有讲过吗

是吗?视频全看完,忘记这小块的知识点了。
回复 使用道具 举报
Akm 黑马帝 2013-12-13 15:17:13
7#
compareTo查看Java API 如下所示:


public int compareTo(String anotherString)按字典顺序比较两个字符串。该比较基于字符串中各个字符的 Unicode 值。按字典顺序将此 String 对象表示的字符序列与参数字符串所表示的字符序列进行比较。如果按字典顺序此 String 对象位于参数字符串之前,则比较结果为一个负整数。如果按字典顺序此 String 对象位于参数字符串之后,则比较结果为一个正整数。如果这两个字符串相等,则结果为 0;compareTo 只在方法 equals(Object) 返回 true 时才返回 0。 这是字典排序的定义。如果这两个字符串不同,那么它们要么在某个索引处的字符不同(该索引对二者均为有效索引),要么长度不同,或者同时具备这两种情况。如果它们在一个或多个索引位置上的字符不同,假设 k 是这类索引的最小值;则在位置 k 上具有较小值的那个字符串(使用 < 运算符确定),其字典顺序在其他字符串之前。在这种情况下,compareTo 返回这两个字符串在位置 k 处两个char 值的差,即值:
this.charAt(k)-anotherString.charAt(k)
如果没有字符不同的索引位置,则较短字符串的字典顺序在较长字符串之前。在这种情况下,compareTo 返回这两个字符串长度的差,即值:
this.length()-anotherString.length()
指定者:接口 Comparable<String> 中的 compareTo参数:anotherString - 要比较的 String。 返回:如果参数字符串等于此字符串,则返回值 0;如果此字符串按字典顺序小于字符串参数,则返回一个小于 0 的值;如果此字符串按字典顺序大于字符串参数,则返回一个大于 0 的值。






评分

参与人数 1技术分 +1 收起 理由
简★零度 + 1

查看全部评分

回复 使用道具 举报
class StringDemo
{
   public static void main(String[] args)
                {
                       String str=new String("java project");//这里的j是小写的!其中对应的ascii值是106!
                       String str2 ="Java project";//这里的J是大写的!其中 对应的ascii值是74!
                        tool.pri(str.compareTo(str2));
}
}
class tool
{
        public static void pri(Object obj)
                {
                        System.out.println(obj);
                }
}
compareto是对两个字符串进行自然顺序的比较,如果参数字符串等于此字符串,则返回值0;如果此字符串按照字典顺序小于字符串参数,则返回一个小于0的值;如果此字符串按照字典顺序大于字符串参数,则返回一个大于0的值。还有就是同一字母的大小写ASCII码值相差32。

评分

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

查看全部评分

回复 使用道具 举报
就像楼下所说,你的J是大写的吧
回复 使用道具 举报
回音 发表于 2013-12-13 13:36
它从第一位开始比较,如果遇到不同的字符,则马上返回这两个字符的ascii值差值,返回值是int类型。同一字母的 ...

既然每个字符都相同,那么不就是说两个字符串完全相同吗,他们的长度也相同,应该返回0啊
回复 使用道具 举报
这问题老毕不是有讲过吗
回复 使用道具 举报
本帖最后由 回音 于 2013-12-13 13:42 编辑

它从第一位开始比较,如果遇到不同的字符,则马上返回这两个字符的ascii值差值,返回值是int类型。同一字母的大小写ASCII码值相差32。如果直到某一个字符串的全部字符都比完也没有不同的字符,那就返回两个字符串长度的差值。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马