【工具類】Java中各種類型判空


相信寫過代碼的朋友們都會進行一個非空判斷,但是各種非空判斷中,那種才是最優雅,最高效的呢?

字符串類型

  1. 常用方法

方法1:if(s == null || s == ""){邏輯…}
方法2:if(s == null || s.equals("")){邏輯…}
方法3:if(s == null || s.length() == 0){邏輯…}

Tip:如果要用equal方法來判斷值,請用object<不可能為空/確定的值>.equal(object<可能為空/可變的值>))

  1. String類方法
    public boolean isEmpty() {
        return value.length == 0;
    }

String類自帶的方法。其中的邏輯就是判斷字符串的長度來判斷字符串是否為空。
3. 工具類

StringUtils是一個工具欄,使用這個工具類需要導入以下依賴

        <!-- https://mvnrepository.com/artifact/org.apache.commons/commons-lang3 -->
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>3.11</version>
        </dependency>
  • isNotEmpty
    public static boolean isEmpty(final CharSequence cs) {
        return cs == null || cs.length() == 0;
    }

    public static boolean isNotEmpty(final CharSequence cs) {
        return !isEmpty(cs);
    }

isNotEmpty的方法就是isEmpty取非,isEmpty就是判斷是否為null和字符串的長度來判斷字符串是否為空。

  • isBlank
   public static boolean isBlank(final CharSequence cs) {
        final int strLen = length(cs);
        if (strLen == 0) {
            return true;
        }
        for (int i = 0; i < strLen; i++) {
            if (!Character.isWhitespace(cs.charAt(i))) {
                return false;
            }
        }
        return true;
    }

    public static int length(final CharSequence cs) {
        return cs == null ? 0 : cs.length();
    }

    public static boolean isNotBlank(final CharSequence cs) {
        return !isBlank(cs);
    }

isNotBlank的方法就是isBlank取非,isBlank就是判斷是否為null和字符串的長度來判斷字符串是否為空。在此基礎上又判斷了字符串中的每個字符是不是空格。

字符串判斷的最優解

先說結論,如果需求中帶僅有空格的字符串等同於空字符串,使用StringUtils工具欄的isBlank方法。如果需求中帶僅有空格的字符串不等同於空字符串,使用StringUtils工具欄的isEmpty方法。

  1. isEmpty最大的問題就是不能判斷null,所以失去了判空的意義。pass
  2. 網上有言論equal或者==的判斷沒有長度=0的判斷效率高,具體什么原因筆者沒有找到肯定的解答。但是從源碼中都使用長度來判斷這一現象也可以得到一定的印證。pass
  3. StringUtils工具欄的isEmpty和if(s == null || s.length() == 0){邏輯…}的缺點就是在於無法判斷空格。但是在實際開發中一個空格的字符串也應該是數據空的。所以最后的抉擇應該是看需求了。

集合類型

  1. 常用方法

方法1:if(arr == null || arr.size() == 0){邏輯…}

  1. 工具類

CollectionUtils是一個工具欄,使用這個工具類需要導入以下依賴

        <!-- https://mvnrepository.com/artifact/org.apache.commons/commons-collections4 -->
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-collections4</artifactId>
            <version>4.4</version>
        </dependency>
  • isEmpty
    public static boolean isEmpty(final Collection<?> coll) {
        return coll == null || coll.isEmpty();
    }

其中isEmpty()是接口Collection的一個方法。根據不同的數據類型,會有不同的實現,我們打開ArrayList類的實現。

發現其實就是一個長度的測試

    public boolean isEmpty() {
        return size == 0;
    }

集合判斷的最優解

先說結論,毫無懸念的就是CollectionUtils工具欄的isEmpty的方法。

常用數據類型

Java中常用的數據類型有int、long、short、double、float 、byte、char、boolean。其中每一個都有其對應的初始值,分別是0、0、0、0.0、0.0、0、(空格)、false。所以這八種數據類型不會為空,只會在邏輯意義上沒有值,所以需要判斷是否賦值的話,就可以直接對初始值進行等值判斷。

值得注意的是,這八個基本數據類型在java中都有對應的包裝,而包裝類是可以為空的,判斷方法非常簡單。與null進行等值判斷即可。

類判斷

像Date,包裝類這種封裝類,直接與null進行等值判斷即可。如果是自定義的Pojo,在判斷對象是否為空的同時,可能還需要判斷里面的屬性,屬性的判斷就根據其屬性的類型,進行相應的判斷。

Optional類

Optional類是Java1.8的新特性,主要就是為了判斷可能類型是否為空的。如果想要了解,可以看下筆者下面這篇文章。
 JDK8新特性——Optional


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM