首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

深入剖析 StringUtils.equals 空值處理邏輯:為何 a 與 null 比較返回 true?

     編輯:程式設計疑難解答

源碼(Commons Lang 2.6 版本)

public static boolean equals(String str1, String str2) {
    return ((str1 == null) ? false : (str2 == null) ? true : str1.equals(str2));
}

邏輯等價

if (str1 == null) return false;
if (str2 == null) return true;   // 關鍵:str1 非空、str2 為空 → 返回 true
return str1.equals(str2);

行為差異

此版本認為「非空字符串」與 null 不相等但返回 true,極易導致業務誤判。後續版本(3.x+)修正為標準語義:

// 3.x 版本
return str1 == null ? str2 == null : str1.equals(str2);

建議

  • 升級至 Commons Lang 3.x+。
  • 或使用 JDK 7+ Objects.equals(a, b)(null-safe、語義標準)。
  • 自行封裝工具方法時明確語義:return a == null ? b == null : a.equals(b);。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved