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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 包晗 中级黑马   /  2012-6-27 10:01  /  3392 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 包晗 于 2012-6-27 16:45 编辑
  1. class Panduan
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 String zhangsan  ="Think In Java";
  6.                 String lisi      ="Think In Java";
  7.                 String wangwu    ="think in java";
  8.                 String zhaoliu   ="Think in Java";
  9.                
  10.                 if(zhangsan.equals(lisi))
  11.                 System.out.println("张三和李四读书内容相同");
  12.                 else
  13.                 System.out.println("张三和李四读书内容不同");

  14.                 if(lisi.equals(wangwu))
  15.                 System.out.println("李四和王五读书内容相同");
  16.                 else
  17.                 System.out.println("李四和王五读书内容不同");

  18.                 if(wangwu.compareTo(zhaoliu)>0)
  19.                 System.out.println("王五和赵六读书内容相同");
  20.                 else
  21.                 System.out.println("王五和赵六读书内容不同");
  22.         
  23.         }
  24. }
复制代码
输出结果是:
张三和李四读书内容相同
李四和王五读书内容不同
王五和赵六读书内容相同

没看懂API文档中compareTo 的用法.
请教大家了

7 个回复

倒序浏览
String 当中的compareTO方法是按字典顺序比较两个字符串的大小,而且是基于各个字符的unicode值来进行比较的,就像你这个例子当中,wangwu和zhaoliu 这两个对象 字符串的长度是相等的,所以会比较在某个索引值上的不同,其实就是比较t和T的大小   小写t的unicode值是116 而大写T的是84 所以明显王五大于赵六 所以判断条件为真  

评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1 赞一个!

查看全部评分

回复 使用道具 举报
compareTo(String anotherString)是String类的方法
按字典顺序比较两个字符串。该比较基于字符串中各个字符的 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()

评分

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

查看全部评分

回复 使用道具 举报
CompareTo是java.lang包下Comparable接口里面的一个方法.
String类实现了该方法.下面是String类的实现的CompareTo方法的源码.下面我给你简单的解释下这个源码把
public int compareTo(String anotherString) {
int len1 = count;//定义第一个字符串的长度
int len2 = anotherString.count;//定义第一个字符串的长度
int n = Math.min(len1, len2);//取得长度小的字符串,并把小串的长度赋给n
char v1[] = value;//将第一个字符串转换为一个字符数组
char v2[] = anotherString.value;//将第二个字符串转换为一个字符数组
int i = offset;//将第一个字符数组的个数赋给i
int j = anotherString.offset;将第er个字节数组的个数赋给j
if (i == j) {//做判断如果2个字节数组的个数一样,就每个字符做比较,返回的是这两个字符对应的ASCII码之差.
     int k = i;
     int lim = n + i;
     while (k < lim) {
  char c1 = v1[k];
  char c2 = v2[k];
  if (c1 != c2) {
      return c1 - c2;
  }
  k++;
     }
} else {//如果2个字符数组长度不一样,则比较小字符串的的长度次就可以了.返回的也是两个字符对应的ASCII码之差.
     while (n-- != 0) {
  char c1 = v1[i++];
  char c2 = v2[j++];
  if (c1 != c2) {
      return c1 - c2;
  }
     }
}
return len1 - len2;
    }

评分

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

查看全部评分

回复 使用道具 举报
1.首先比较两个字符串的有没有索引值上的不同,如果有多个不同,就比较索引值小的,返回的是字符的unicode的差值
2.如果没有索引上的不同就比较字符串长度,短的就是小的,长的就是大的

评分

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

查看全部评分

回复 使用道具 举报
String中的equals()是比较两个对象的内容是否相等,所以会输出前两个结果
compareTo方法是String实现Comparable<String> 接口然后重写的子类,且Comparable强行对实现它的每个类的对象进行自然排序,所以第三个比较会按照自然顺序进行比较,如0-9,a-z,A-Z等自然顺序,并且compareTo方法的描述是:
int compareTo(T o):比较此对象与指定对象的顺序。如果该对象小于、等于或大于指定对象,则分别返回负整数、零或正整数。
此处王五、赵六读书内容分别为“think in java”、“Think in Java”,内容一位一位的比较,首字中t比T的自然顺序小,会返回正整数。所以会输出读书内容相同的结果。
此处延伸一下,若读书内容都为"think in java",调用compareTo方法会返回0,既读书内容不同;
若王五、赵六的读书内容互换一下,compareTo返回负整数。                                                                                                 该知识点包含在TreeSet里面,如果基础测试中按学生成绩排序输出能够做出来,基本原理就清楚了

评分

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

查看全部评分

回复 使用道具 举报
按字典顺序比较两个字符串。该比较基于字符串中各个字符的 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 的值。
例子:
public class ObjectCompareTo
{  private Integer min,max;
     public ObjectCompareTo(Integer min, Integer max)
     {
          this.min = min;
          this.max = max;
      }  
     public boolean compareTo(Object num)
     {
          Comparable compare=(Comparable)num;
          int minMatch=compare.compareTo(getMinComparable());
          int maxMatch=compare.compareTo(getMaxComparable());
          System.out.println(minMatch+"|"+maxMatch);
          return minMatch>=0&&maxMatch<=0; }
     public Comparable getMinComparable()
     {
          return this.min;
      }
     public Comparable getMaxComparable()
     {
          return this.max;
     }  
     public static void main(String[] args)
     {     
          Integer minValue=3,maxValue=25;
          ObjectCompareTo compareTo=new ObjectCompareTo(minValue,maxValue);
          System.out.println(compareTo.compareTo(24));
     }
}

这是我在网上搜到的,对你可能会有点帮助,你参考一下吧

评分

参与人数 1技术分 +1 收起 理由
wangfayin + 1 精神不错

查看全部评分

回复 使用道具 举报
包晗 中级黑马 2012-6-27 12:31:07
8#
谢谢 我明白了  

评分

参与人数 1技术分 +1 收起 理由
wangfayin + 1 鼓励一下

查看全部评分

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