Java源码学习-String类的compareTo方法
2014-10-11 10:43
363 查看
下面来自jdk中src/java/lang下的String类的compareTo()方法源码,反斜线//后面的部分为个人注释
1.为什么判断i==j,是否为了少两次自增/自减操作(j++/n--)?
2.compareTo方法的实际应用场景。
compareTo来自于java.lang.Comparable接口,如同其API中方法的第一句注释说明:Compares the object with the specified object for order.可见此方法的目的实际为提供一种确定两个对象先后顺序的方法,这样需要我们去自定义何为“先”,何为“后”的概念(区别于Object类的equals方法,其目的为比较两个对象是否相同)。
规则可参照java.lang.Comparable接口原码的注释部分。
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; //当前字符串开始位置 int j = anotherString.offset; //当前参数字符串开始位置 if (i == j) { //如果当前对象和参数对象的开始位置相同 int k = i; int lim = n + i; while (k < lim) { char c1 = v1[k]; char c2 = v2[k]; if (c1 != c2) { return c1 - c2; //返回unicode值的差 } k++; } } else { while (n-- != 0) { char c1 = v1[i++]; char c2 = v2[j++]; if (c1 != c2) { return c1 - c2; } } } return len1 - len2; //当前n个字符都相同时,返回两个字符串的长度的差 }关于上述代码有两点理解:
1.为什么判断i==j,是否为了少两次自增/自减操作(j++/n--)?
2.compareTo方法的实际应用场景。
compareTo来自于java.lang.Comparable接口,如同其API中方法的第一句注释说明:Compares the object with the specified object for order.可见此方法的目的实际为提供一种确定两个对象先后顺序的方法,这样需要我们去自定义何为“先”,何为“后”的概念(区别于Object类的equals方法,其目的为比较两个对象是否相同)。
规则可参照java.lang.Comparable接口原码的注释部分。
相关文章推荐
- java源码解析之String类的compareTo(String otherString)方法
- Java源码学习-String类的equals方法
- Java源码学习-String类的trim方法
- 基于 Android NDK 的学习之旅----- Java 方法映射到C中的签名(附源码)
- 基于 Android NDK 的学习之旅----- Java 方法映射到C中的签名(附源码)
- JAVA学习第三十课(经常使用对象API)- String类:类方法练习
- Java源码学习-String类的构造方法String(char value[])
- java学习之路--java对象(1)--重点String类的常用方法
- java学习日记_58:String类的概述及其构造方法
- java学习之旅54、55--读String类源码
- Java源码String类lastIndexOf方法的分析
- java中String类中的substring方法的源码
- Java中String类的compareTo方法
- java学习总结(16.07.14)String类及其的常用方法
- 常见对象_String类的compareTo()方法的源码解析
- Java学习-025-类名或方法名应用之一 -- 调试源码
- 8.java学习 20131212 String类的基本方法
- java学习笔记(六)——String类的常用方法
- Java源码学习-Object类的hashCode和equals方法
- JAVA学习第三十课(常用对象API)- String类:类方法练习