使用String類的compareTo方法比較規(guī)則詳解
String類的compareTo方法比較規(guī)則
1、compareTo 源碼
public int compareTo(String anotherString) {
int len1 = value.length;
int len2 = anotherString.value.length;
int lim = Math.min(len1, len2);
char v1[] = value;
char v2[] = anotherString.value;
int k = 0;
while (k < lim) {
char c1 = v1[k];
char c2 = v2[k];
if (c1 != c2) {
return c1 - c2;
}
k++;
}
return len1 - len2;
}private final char value[]; //String類使用char[]來保存字符串
2、代碼分析
A、首先會(huì)將調(diào)用compareTo方法的 str1 的長度保存到 len1 中,然后str2將作為實(shí)參傳入方法給到anotherString,并將anotherString長度保存到 len2 中,即:str2的長度。
B、然后調(diào)用 Math.min(len1, len2) 方法,得到長度中的最小值,用于決定后續(xù)字符依次循環(huán)比較的次數(shù)。
C、讓 v1 指向 str1 的 value數(shù)組,v2 指向 str2 的 value數(shù)組。
D、進(jìn)入while循環(huán)進(jìn)行單個(gè)字符依次循環(huán)比較,循環(huán)條件 k < lim,k 從 0 開始,因?yàn)閿?shù)組下標(biāo)從0開始,因此是小于 lim。
E、每次都將 v1 和 v2 中相同索引位置的字符取出來比較是否相同:
a、如果不相同:則直接結(jié)束compareTo方法的調(diào)用,直接返回兩個(gè)字符的ascii碼差值;
b、如果相同:則繼續(xù)比較下一個(gè)字符:
- 1、如果找到了不同的字符,仍然返回ascii碼差值;
- 2、如果在循環(huán)比較結(jié)束后,仍然沒有找到不同的字符,即:str1 和 str2前半部分的字符相同,則直接返回兩個(gè)字符串總長度之差,即:len1 - len2(str1.length - str2.length)。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
springboot讀取.properties配置文件中的map和list類型配置參數(shù)方式
這篇文章主要介紹了springboot讀取.properties配置文件中的map和list類型配置參數(shù)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2025-03-03
Java程序員的10道常見的XML面試問答題(XML術(shù)語詳解)
包括web開發(fā)人員的Java面試在內(nèi)的各種面試中,XML面試題在各種編程工作的面試中很常見。XML是一種成熟的技術(shù),經(jīng)常作為從一個(gè)平臺(tái)到其他平臺(tái)傳輸數(shù)據(jù)的標(biāo)準(zhǔn)2014-04-04
SpringBoot全局異常攔截與自定義錯(cuò)誤頁面實(shí)現(xiàn)過程解讀
本文介紹了SpringBoot中全局異常攔截與自定義錯(cuò)誤頁面的實(shí)現(xiàn)方法,包括異常的分類、SpringBoot默認(rèn)異常處理機(jī)制、全局異常攔截實(shí)現(xiàn)、自定義錯(cuò)誤頁面實(shí)現(xiàn)以及兩者的結(jié)合使用,通過這些技術(shù),可以提高系統(tǒng)的穩(wěn)定性和用戶體驗(yàn)2025-12-12
Java字符串工具類從原生到第三方庫的高效實(shí)踐詳解
字符串是我們?cè)诰幊讨凶畛J褂玫囊环N數(shù)據(jù)類型,Java中用類來描述字符串,其中最常用的字符串處理類是String,這篇文章主要介紹了Java字符串工具類從原生到第三方庫的高效實(shí)踐的相關(guān)資料,需要的朋友可以參考下2025-08-08
java字符串轉(zhuǎn)JSON簡(jiǎn)單代碼示例
這篇文章主要給大家介紹了關(guān)于java字符串轉(zhuǎn)JSON的相關(guān)資料,JSON?是一種輕量級(jí)的數(shù)據(jù)交換格式,常用于Web應(yīng)用程序中的數(shù)據(jù)傳輸,文中通過代碼示例介紹的非常詳細(xì),需要的朋友可以參考下2023-09-09
java數(shù)組實(shí)現(xiàn)循環(huán)隊(duì)列示例介紹
大家好,本篇文章主要講的是java數(shù)組實(shí)現(xiàn)循環(huán)隊(duì)列示例介紹,感興趣的同學(xué)趕快來看一看吧,對(duì)你有幫助的話記得收藏一下,方便下次瀏覽2022-01-01

