Java空值判斷


Java空字符串與null的區別:
1、類型 null表示的是一個對象的值,而並不是一個字符串。例如聲明一個對象的引用,String a = null ;
""表示的是一個空字符串,也就是說它的長度為0。例如聲明一個字符串String str = "" ; 2、內存分配 String str = null ; 表示聲明一個字符串對象的引用,但指向為null,也就是說還沒有指向任何的內存空間;
String str = ""; 表示聲明一個字符串類型的引用,其值為""空字符串,這個str引用指向的是空字符串的內存空間; 在java中變量和引用變量是存在棧中(stack),而對象(new產生的)都是存放在堆中(heap): 就如下: String str = new String("abc") ; 等號左邊的是存放在棧中(stack),=右邊是存放在堆中(heap)。 結論 字符串對象與null的值不相等,且內存地址也不相等; 空字符串對象與null的值不相等,且內存地址也不相等; new String()創建一個字符串對象的默認值為"" (String類型成員變量的初始值為null)

 

Java判斷字符串是否為空的4種方法

if(s == null || s.equals(""));直觀, 方便, 但效率很低
if(s == null || s.length() == 0);比較字符串長度, 效率高
if(s == null || s.isEmpty());
if (s == null || s == "");

注意:s == null 是有必要存在的,如果 String 類型為null, 而去進行 equals(String) 或 length() 等操作會拋出java.lang.NullPointerException.
並且s==null 的順序必須出現在前面,不然同樣會拋出java.lang.NullPointerException.

 

Java判斷自定義類對象是否為空

Java使用反射判斷對象是否為NULL
第一層:  直接使用 object == null 去判斷,對象為null的時候返回true,不為null的時候返回false。
第二層:在object != null 為true的情況 下,進一步去判斷對象的所有屬性是否為null

--------------------------------------------------------
//判斷1  : 這里會返回 true
User user = null;
if(user == null){
  return true;  
}else{
  return false;  
}

//判斷2 : 這里會返回 false
User user = new User();
if(user == null){
  return true;  
}else{
  return false;  
}

原因: User user = new User(); 這時候已經創建了一個對象,所以user不會為null
---------------------------------------------------------------------------

對象不為null,但是對象的所有屬性均為null。[boolean類型除外,以及序列化值除外
進一步判斷
創建Util類,使用反射對對象的屬性進行判斷  CheckObjectIsNullUtils.java
package com.chinalife.proposal.common.util;

import java.lang.reflect.Field;
import java.lang.reflect.Type;

/**
 * <p>Description: 判斷對象是否為空,進一步判斷對象中的屬性是否都為空 </p>
 * @author duanfeixia
 * @date 2018年11月12日
 */
public class CheckObjectIsNullUtils {
    
    /**
     * 判斷對象是否為空,且對象的所有屬性都為空
     * ps: boolean類型會有默認值false 判斷結果不會為null 會影響判斷結果
     *     序列化的默認值也會影響判斷結果
     * @param object
     * @return
     */
    public  boolean objCheckIsNull(Object object){
        Class clazz = (Class)object.getClass(); // 得到類對象
        Field fields[] = clazz.getDeclaredFields(); // 得到所有屬性
        boolean flag = true; //定義返回結果,默認為true
        for(Field field : fields){
            field.setAccessible(true);
            Object fieldValue = null;
            try {
                fieldValue = field.get(object); //得到屬性值
                Type fieldType =field.getGenericType();//得到屬性類型
                String fieldName = field.getName(); // 得到屬性名
                System.out.println("屬性類型:"+fieldType+",屬性名:"+fieldName+",屬性值:"+fieldValue);
            } catch (IllegalArgumentException e) {
                e.printStackTrace();
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            }
            if(fieldValue != null){  //只要有一個屬性值不為null 就返回false 表示對象不為null
                flag = false;
                break;
            }
        }
        return flag;
    }
    
}

測試
public class CheckObjectIsNullUtilsTest {

    @Test
    public void  testObjectCheck(){
        CheckObjectIsNullUtils checkUtils= new CheckObjectIsNullUtils();
        User user= new User();
        boolean flag1 = checkUtils.objCheckIsNull(user);
        System.err.println("是否為空:"+flag1);
    }
}
------------------------------------------------------

注意
boolean 定義的變量默認值為false,Boolean定義的變量默認值為 null.

在判斷對象是否為空時需要注意類是否含有boolean成員變量 和 類是否實現序列化接口,
boolean會有默認值,導致判斷時返回false
類一旦實現了序列化接口,就會存在serialVersionUID屬性有值,導致判斷返回false

 

Java判斷數組是否為空

// 一維數組: int[] array
if(array == null || array.length == 0)
    return true;

//二維數組: int[][] array
if((array==null||array.length==0)||(array.length==1&&array[0].length==0))
    return true;

array==null:數組為空
array.length==0:行為0,即 array = {}
array.length==1 && array[0].length == 0:行為1,列為0,即 array = {{}}

 

Java判斷集合是否為空

list.isEmpty()   list.size()==0     list==null的區別:

1. isEmpty()方法是用來判斷集合中有沒有元素

2. size()方法是判斷集合中的元素個數

3. isEmpty()和size()==0意思一樣,沒有區別,通用。

4. if(list ==null)是判斷有沒有這個集合


所以判斷List集合是否為空的方法
if(list!=null && list.size()>=0){
}

 


免責聲明!

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



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