比較兩個字串值是否相等的兩種方法(含原始碼解析)

2021-09-27 02:23:29 字數 1477 閱讀 5968

public static void main(string args)
stringutils的compare原始碼解析:底層實現其實還是用的string的compareto,只是做了一些特殊情況處理

public static int compare(final string str1, final string str2) 

public static int compare(final string str1, final string str2, final boolean nullisless)

if (str1 == null)

if (str2 == null)

return str1.compareto(str2);

}

string的compareto原始碼解析:比較是基於字串中各個字元的unicode值,先是獲取兩個字串的長度(string內部維護著char型別的value作為字串的容器),取兩者長度的最小值作為迴圈遍歷的終點,不斷地比較兩個字串陣列的對應位置是否相等,出現不相等則返回兩者字元的unicode差值,如果遍歷完都相等,則返回兩字串長度的差值,差值=0則說明相等

public int compareto(string anotherstring) 

k++;

}return len1 - len2;

}

stringutils工具類的equals方法原始碼解析:前面部if判斷部分與其compare含義類似。最後呼叫的是charsequenceutils.regionmatches方法,是一種區域匹配的實現。通過以字串1為基準匹配字串2.

因為本文是比較兩個string型別的字串,所以到cs1.equals(cs2)語段執行完就結束了

public static boolean equals(final charsequence cs1, final charsequence cs2) 

if (cs1 == null || cs2 == null)

if (cs1.length() != cs2.length())

if (cs1 instanceof string && cs2 instanceof string)

return charsequenceutils.regionmatches(cs1, false, 0, cs2, 0, cs1.length());

}

看看string的equals的實現:其實現與string的compareto的實現想法是差不多的,本質還是挨個比較字串的字元

public boolean equals(object anobject) 

if (anobject instanceof string)

return true;}}

return false;

}

比較兩個字串是否相等

我剛剛才學了組合語言,就寫了乙個很簡單的程式.下面是程式 dseg segment data1 db 9,0,9 dup data2 db 9,0,9 dup cnt db 8 str1 db 13,10,two string is same.str2 db 13,10,two string is ...

shell比較兩個字串是否相等

比較兩個字串是否相等的辦法是 if test x test x then 這裡的關鍵有幾點 1 使用單個等號 2 注意到等號兩邊各有乙個空格 這是unix shell的要求 3 注意到 test x最後的x,這是特意安排的,因為當 test為空的時候,上面的表示式就變成了x testx,顯然是不相等...

shell比較兩個字串是否相等

比較兩個字串是否相等的辦法是 if test x test x then 這裡的關鍵有幾點 1 使用單個等號 2 注意到等號兩邊各有乙個空格 這是unix shell的要求 3 注意到 test x最後的x,這是特意安排的,因為當 test為空的時候,上面的表示式就變成了x testx,顯然是不相等...