天天看點

java 判斷空值_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 = newUser();if(user == null){return true;

}else{return false;

}

原因: User user= newUser(); 這時候已經建立了一個對象,是以user不會為null---------------------------------------------------------------------------對象不為null,但是對象的所有屬性均為null。[boolean類型除外,以及序列化值除外

進一步判斷

建立Util類,使用反射對對象的屬性進行判斷 CheckObjectIsNullUtils.javapackagecom.chinalife.proposal.common.util;importjava.lang.reflect.Field;importjava.lang.reflect.Type;

public classCheckObjectIsNullUtils {

public booleanobjCheckIsNull(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;

}

}returnflag;

}

}

測試public classCheckObjectIsNullUtilsTest {

@Testpublic voidtestObjectCheck(){

CheckObjectIsNullUtils checkUtils= newCheckObjectIsNullUtils();

User user= newUser();boolean flag1 =checkUtils.objCheckIsNull(user);

System.err.println("是否為空:"+flag1);

}

}------------------------------------------------------注意boolean 定義的變量預設值為false,Boolean定義的變量預設值為 null.

在判斷對象是否為空時需要注意類是否含有boolean成員變量 和 類是否實作序列化接口,

boolean會有預設值,導緻判斷時傳回false

類一旦實作了序列化接口,就會存在serialVersionUID屬性有值,導緻判斷傳回false