某銀行後台程序員Sroan編寫了一個函數代碼,函數主要為了實現比較兩個字元串是否相同。
具體代碼如下:
function isEqual($str1, $str2) {
if(strlen($str1) !== strlen($str2)) {
return false;
}
$result = 0;
for($i = 0; $i < strlen($str1); $i++) {
$result |= ord($str1[$i]) ^ ord($str2[$i]);
}
return $result == 0;
}
在上面的代碼中,首先檢查兩個字元串的長度是否相同。如果它們的長度不同,則直接返回false。
如果兩個字元串的長度相同,則遍歷字元串,並使用異或運算符比較每個字元。最後,將比較結果與0進行比較,如果它們相等,則表示兩個字元串相等,返回true,否則返回false。
Sroan的領導看了代碼后,覺得這段代碼效率低下,可以更好提高效率,於是額外添加了一行。具體如下:
function isEqual($str1, $str2) {
if(strlen($str1) !== strlen($str2)) {
return false;
}
$result = 0;
for($i = 0; $i < strlen($str1); $i++) {
$result |= ord($str1[$i]) ^ ord($str2[$i]);
if(result!=0) return false;
}
return $result == 0;
}
增加的這一行的代碼作用是:兩個字元串在中間某個位置不同,比較過程將會在這個位置停止,並返回不相等的結果。
問:從實際應用角度來看,以上兩個函數,哪個更好?