黑马程序员技术交流社区

标题: 求解关于String类中compareTo()方法的问题。 [打印本页]

作者: 曾经的迷失    时间: 2013-10-21 23:34
标题: 求解关于String类中compareTo()方法的问题。
为什么比较结果返回值是-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);        }}


作者: 回天之力    时间: 2013-10-22 00:05
compareto()就是比较两个数据的大小关系 大于0表示前一个数据比后一个数据大, 0表示相等,小于0表示第一个数据小于第二个数据,具体返回什么值不确定。
作者: 张运    时间: 2013-10-22 00:08
请参照jJDK API :如果参数字符串等于此字符串,则返回值 0;如果此字符串按字典顺序小于字符串参数,则返回一个小于 0 的值;如果此字符串按字典顺序大于字符串参数,则返回一个大于 0 的值。至于为啥是-2,我认为应该应该和哈希值有关吧,不确定。
作者: wenbaoxing    时间: 2013-10-22 00:33
请看以下代码,当中有我的注释:
  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. }
复制代码

作者: Simple_love    时间: 2013-10-22 01:44
两个字符串比较大小,其实就是比较字符串上的每个字符进行比较, 按照自然的顺序比较,当一个字符串s1上的某个位置上的字符小于s2某个位置上的字符时。  则返回两个字符串同一个位置上的字符ASCII码相减之后的值,
作者: 曾经的迷失    时间: 2013-10-22 09:02
标题: RE: 求解关于String类中compareTo()方法的问题。
wenbaoxing 发表于 2013-10-22 00:33
请看以下代码,当中有我的注释:

{:soso_e181:}{:soso_e129:}明白了!!
作者: 杨增坤    时间: 2013-10-23 08:46
以后发帖要注意排版哦!
作者: 1961993790    时间: 2013-10-23 10:57
compareTo方法是将两个字符串进行每个字符的Ascii码比较,发现不同时返回s1相对位置减去s2相对位置的字符的值,照你的题目,两个字符串的第一处不同出现在第一位,也就是a和c,a的ascii码为97,c的ascii码99,所以,返回值为97-99=-2,如果你用s2.compareTo(s1),则返回的是-2,希望对你有帮助!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2