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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

为什么比较结果返回值是-2啊?class StringMethodDemo{        public static void method_7()        {                String s1 = "abb";                String s2 = "ccc";                sop(s1.compareTo(s2));        }        public static void main(String[] args)        {                method_7();                        }        public static void sop(Object obj)        {                System.out.println(obj);        }}

评分

参与人数 1技术分 +1 收起 理由
周志龙 + 1 支持新手多问

查看全部评分

7 个回复

倒序浏览
compareto()就是比较两个数据的大小关系 大于0表示前一个数据比后一个数据大, 0表示相等,小于0表示第一个数据小于第二个数据,具体返回什么值不确定。
回复 使用道具 举报
请参照jJDK API :如果参数字符串等于此字符串,则返回值 0;如果此字符串按字典顺序小于字符串参数,则返回一个小于 0 的值;如果此字符串按字典顺序大于字符串参数,则返回一个大于 0 的值。至于为啥是-2,我认为应该应该和哈希值有关吧,不确定。

评分

参与人数 1技术分 +1 收起 理由
杨增坤 + 1

查看全部评分

回复 使用道具 举报
请看以下代码,当中有我的注释:
  1. package com.itheima;


  2. //为什么比较结果返回值是-2啊?
  3. class StringMethodDemo {
  4.         public static void method_7() {
  5.                 String s1 = "abb";
  6.                 String s2 = "ccc";        //如果将它改为"acc",则会返回-1
  7.                 sop(s1.compareTo(s2));
  8.                 /*
  9.                 你查看jdk API会发现此方法是按字典顺序比较的,先拿第一个字符串的a和
  10.                 第二个字符串的c进行比较,'a'-'c'=-2,所以返回-2(a的ASCII码是97,c是99)
  11.                 */
  12.         }

  13.         public static void main(String[] args) {
  14.                 method_7();
  15.                 System.out.println((int)'a');
  16.         }

  17.         public static void sop(Object obj) {
  18.                 System.out.println(obj);
  19.         }
  20. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
周志龙 + 1 很给力!

查看全部评分

回复 使用道具 举报 1 0
两个字符串比较大小,其实就是比较字符串上的每个字符进行比较, 按照自然的顺序比较,当一个字符串s1上的某个位置上的字符小于s2某个位置上的字符时。  则返回两个字符串同一个位置上的字符ASCII码相减之后的值,

评分

参与人数 1技术分 +1 收起 理由
杨增坤 + 1

查看全部评分

回复 使用道具 举报

RE: 求解关于String类中compareTo()方法的问题。

wenbaoxing 发表于 2013-10-22 00:33
请看以下代码,当中有我的注释:

{:soso_e181:}{:soso_e129:}明白了!!
回复 使用道具 举报
以后发帖要注意排版哦!
回复 使用道具 举报
compareTo方法是将两个字符串进行每个字符的Ascii码比较,发现不同时返回s1相对位置减去s2相对位置的字符的值,照你的题目,两个字符串的第一处不同出现在第一位,也就是a和c,a的ascii码为97,c的ascii码99,所以,返回值为97-99=-2,如果你用s2.compareTo(s1),则返回的是-2,希望对你有帮助!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马