界: Code Quality
程式碼品質不佳,會導致無法預料的行為。從使用者的角度來看,這通常表現為可用性不佳。對於攻擊者而言,這提供了以意想不到的方式向系統施加壓力的機會。
Code Correctness: Erroneous String Compare
Abstract
應使用
equals()
方法來比較字串,而不是 ==
或 !=
。Explanation
此程式使用
範例 1:永遠不會執行以下分支語句。
當使用
==
或 !=
來比較兩個字串是否相等,其為比較兩個物件是否相同,而非它們的值。因此,若使用這個方法,兩個參照將永遠不會相等。範例 1:永遠不會執行以下分支語句。
if (args[0] == STRING_CONSTANT) {
logger.info("miracle");
}
當使用
==
和 !=
運算子來比較相同物件中的字串時,它們只會如預期般的運作。要出現這種情況,最常見的方法就是將字串控制在內部,這樣,將字串增加到由 String
類別維護的物件池中。一旦將字串控制在內部,每次使用這個字串時都將使用相同的物件,並且相等運算子會如預期般運作。所有字串文字和以字串當作值的常數會自動控制在內部。其他字串可以透過呼叫 String.intern()
來以手動控制在內部,這將會回傳目前字串的標準實例,必要時也會建立一個實例。References
[1] Standards Mapping - Common Weakness Enumeration CWE ID 597
desc.structural.java.code_correctness_erroneous_string_compare