使用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[]來(lái)保存字符串
2、代碼分析
A、首先會(huì)將調(diào)用compareTo方法的 str1 的長(zhǎng)度保存到 len1 中,然后str2將作為實(shí)參傳入方法給到anotherString,并將anotherString長(zhǎng)度保存到 len2 中,即:str2的長(zhǎng)度。
B、然后調(diào)用 Math.min(len1, len2) 方法,得到長(zhǎng)度中的最小值,用于決定后續(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 中相同索引位置的字符取出來(lái)比較是否相同:
a、如果不相同:則直接結(jié)束compareTo方法的調(diào)用,直接返回兩個(gè)字符的ascii碼差值;
b、如果相同:則繼續(xù)比較下一個(gè)字符:
- 1、如果找到了不同的字符,仍然返回ascii碼差值;
- 2、如果在循環(huán)比較結(jié)束后,仍然沒(méi)有找到不同的字符,即:str1 和 str2前半部分的字符相同,則直接返回兩個(gè)字符串總長(zhǎng)度之差,即:len1 - len2(str1.length - str2.length)。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java實(shí)現(xiàn)文件監(jiān)控器FileMonitor的實(shí)例代碼
這篇文章主要介紹了Java實(shí)現(xiàn)文件監(jiān)控器FileMonitor的實(shí)例代碼,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-12-12
淺析SpringBoot中如何啟用MongoDB事務(wù)
這篇文章主要為大家詳細(xì)介紹了SpringBoot中如何啟用MongoDB事務(wù),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2025-05-05
通過(guò)Java設(shè)置Word頁(yè)面背景色過(guò)程詳解
這篇文章主要介紹了通過(guò)Java設(shè)置Word頁(yè)面背景色過(guò)程詳解,Word中可以針對(duì)不同文檔排版設(shè)計(jì)要求來(lái)設(shè)置背景設(shè)置顏色。常見的可設(shè)置單一顏色、漸變色或加載圖片來(lái)設(shè)置成背景。下面通過(guò)Java來(lái)設(shè)置以上3種Word頁(yè)面背景色,需要的朋友可以參考下2019-07-07
SpringBoot @CompentScan excludeFilters配置無(wú)效的解決方案
這篇文章主要介紹了SpringBoot @CompentScan excludeFilters配置無(wú)效的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-11-11
idea 設(shè)置鼠標(biāo)懸停(放上)彈出注釋的方法
這篇文章主要介紹了idea 設(shè)置鼠標(biāo)懸停(放上)彈出注釋的方法,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-11-11
SpringCloud中的Feign服務(wù)間的調(diào)用詳解
這篇文章主要介紹了SpringCloud中的Feign服務(wù)間的調(diào)用詳解,Feign 是一個(gè)聲明式的 REST 客戶端,它能讓 REST 調(diào)用更加簡(jiǎn)單,Feign 供了 HTTP 請(qǐng)求的模板,通過(guò)編寫簡(jiǎn)單的接口和插入注解,就可以定義好 HTTP 請(qǐng)求的參數(shù)、格式、地址等信息,需要的朋友可以參考下2024-01-01

