在API源码中,String的compareTo其实就是一次比较两个字符串的ASCII码。如果两个字符串的ASCII相等则继续后续比较,否则直接返回两个ASCII的差值。如果两个字符串完全一样,则返回0.下面是源码:

public int compareTo(String anotherString) {
int len1 = count;
int len2 = anotherString.count;
//获取到两个字符串的较短的长度
int n = Math.min(len1, len2);
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];
//如果两个字符的ASC不相同,则直接返回
if (c1 != c2) {
return c1 - c2;
}
k++;
}
} else {
while (n-- != 0) {
char c1 = v1[i++];
char c2 = v2[j++];
//如果两个字符的ASC不相同,则直接返回
if (c1 != c2) {
return c1 - c2;
}
}
}
//如果都一样,返回两个字符串的长度查
return len1 - len2;
}

由上面的代码,我们可以很方便计算两个字符串的compareTo的值:

  

  int i1 = "abcd".compareTo("adhf");
  int i2 = "abc".compareTo("abcdef");
  int i3 = "abcd".compareTo("abc");

  System.out.println(i1);//-2
  System.out.println(i2);-3
  System.out.println(i3);0

  举例:compareTo的实际应用?于进行简单的字符串排序。(例如使用compareTo进行姓名的排序)

  

// 使用简单的循环排序
for (int i = 0; i < array.length - 1; i++) {
for (int j = i + 1; j < array.length; j++) {
if (array[i].compareTo(array[j]) > 0) {
String temp = array[i];
array[i] = array[j];
array[j] = temp; }
}
} for (int i = 0; i < 5; i++) { System.out.println(array[i]);
}
}

针对上面String的排序后,字符串的内容将会是:

james  libai  lilei  owen  wolf

最新文章

  1. IOS遍历方式
  2. C语言中链表怎么删除结点?
  3. 数据结构作业——N!的位数(斯特灵公式)
  4. 忘记mysql的root密码
  5. Sublime 学习记录(二) package control 组件
  6. MSSQL - 自增1的标识列一次增长了1000
  7. [Micropython][ESP8266] TPYBoard V202 之MQTT协议接入OneNET云平台
  8. MFC窗口创建、销毁消息流程
  9. 报错utf-8错误
  10. 对list遍历删除符合的数据
  11. oradebug 10046
  12. centos7启动过程及systemd详细说明
  13. 在线画UML图的工具
  14. ref、out与params
  15. 11、Logback日志框架介绍和SpringBoot整合实战 2节课
  16. 2018-2019-2 网络对抗技术 20165301 Exp4 恶意代码分析
  17. Mui --- 弹出菜单
  18. CVE-2017-8046 复现与分析
  19. @react-native-community/async-storage在Android上的手动link问题
  20. 使用jQuery操作元素属性

热门文章

  1. New start-开始我的学习记录吧
  2. win10创建扩展分区
  3. JDK11 | 第四篇 : 增强API
  4. Java8 特性详解(一) Lambda
  5. POJ 1905 题解(二分+几何)
  6. 补码一位乘法(Booth算法,C语言实现)
  7. 解决Vscode编辑器不能打开多标签页问题
  8. Groovy基本语法
  9. Petrozavodsk Winter-2018. AtCoder Contest. Problem I. ADD, DIV, MAX 吉司机线段树
  10. 洛谷 P2783 有机化学之神偶尔会做作弊(Tarjan,LCA)