java对象为空的判断

如图

/** 
     * åˆ¤æ–­å¯¹è±¡æˆ–对象数组中每一个对象是否为空: å¯¹è±¡ä¸ºnull,字符序列长度为0,集合类、Map为empty 
     *  
     * @param obj 
     * @return 
     */  
    public static boolean isNullOrEmpty(Object obj) {  
        if (obj == null)  
            return true;  
  
        if (obj instanceof CharSequence)  
            return ((CharSequence) obj).length() == 0;  
  
        if (obj instanceof Collection)  
            return ((Collection) obj).isEmpty();  
  
        if (obj instanceof Map)  
            return ((Map) obj).isEmpty();  
  
        if (obj instanceof Object[]) {  
            Object[] object = (Object[]) obj;  
            if (object.length == 0) {  
                return true;  
            }  
            boolean empty = true;  
            for (int i = 0; i < object.length; i++) {  
                if (!isNullOrEmpty(object[i])) {  
                    empty = false;  
                    break;  
                }  
            }  
            return empty;  
        }  
        return false;  
    }  
应用场景:
读取excel文件,转化为一个二维数组:Object[][] arrays
但是excel中有空行,所以需要过滤Object[][] arrays中的空的一维数组:
Java代码  
/*** 
     * è¿‡æ»¤æ•°ç»„中的空元素 
     *  
     *  
     * @param arrays 
     * @return 
     */  
    public static Object[][] filterEmpty(Object[][] arrays) {  
        int sumNotNull = 0;  
        /*** 
         * ç»Ÿè®¡éžç©ºå…ƒç´ çš„总个数 
         */  
        for (int i = 0; i < arrays.length; i++) {  
            Object object = arrays[i];  
            if (!ValueWidget.isNullOrEmpty(object)  
                    && !SystemUtil.isNullOrEmpty((Object[]) object)) {// åˆ¤æ–­å…ƒç´ æ˜¯å¦ä¸ºç©º  
                sumNotNull = sumNotNull + 1;  
            }  
        }  
        Object[][] filtedObjs = new Object[sumNotNull][];  
        int index = 0;  
        for (int i = 0; i < arrays.length; i++) {  
            Object[] object_tmp = arrays[i];  
            if (!ValueWidget.isNullOrEmpty(object_tmp)  
                    && !SystemUtil.isNullOrEmpty((Object[]) object_tmp)) {// åˆ¤æ–­å…ƒç´ æ˜¯å¦ä¸ºç©º  
                filtedObjs[index++] = object_tmp;  
            }  
        }  
        return filtedObjs;  
    }  
判断对象的所有成员变量是否为空
Java代码  
/*** 
     * Determine whether the object's fields are empty 
     *  
     * @param obj 
     * @param isExcludeZero  :true:数值类型的值为0,则当做为空;----false:数值类型的值为0,则不为空 
     *  
     * @return 
     * @throws SecurityException 
     * @throws IllegalArgumentException 
     * @throws NoSuchFieldException 
     * @throws IllegalAccessException 
     */  
    public static boolean isNullObject(Object obj, boolean isExcludeZero)  
            throws SecurityException, IllegalArgumentException,  
            NoSuchFieldException, IllegalAccessException {  
        if(ValueWidget.isNullOrEmpty(obj)){//对象本身就为null  
            return true;  
        }  
        List<Field> fieldList = ReflectHWUtils.getAllFieldList(obj.getClass());  
        boolean isNull = true;  
        for (int i = 0; i < fieldList.size(); i++) {  
            Field f = fieldList.get(i);  
            Object propertyValue = null;  
            try {  
                propertyValue = getObjectValue(obj, f);  
            } catch (NoSuchFieldException e) {  
                e.printStackTrace();  
            }  
  
            if (!ValueWidget.isNullOrEmpty(propertyValue)) {// å­—段不为空  
                if (propertyValue instanceof Integer) {// æ˜¯æ•°å­—  
                    if (!((Integer) propertyValue == 0 && isExcludeZero)) {  
                        isNull = false;  
                        break;  
                    }  
                } else if (propertyValue instanceof Double) {// æ˜¯æ•°å­—  
                    if (!((Double) propertyValue == 0 && isExcludeZero)) {  
                        isNull = false;  
                        break;  
                    }  
                }else if (propertyValue instanceof Float) {// æ˜¯æ•°å­—  
                    if (!((Float) propertyValue == 0 && isExcludeZero)) {  
                        isNull = false;  
                        break;  
                    }  
                }else if (propertyValue instanceof Short) {// æ˜¯æ•°å­—  
                    if (!((Short) propertyValue == 0 && isExcludeZero)) {  
                        isNull = false;  
                        break;  
                    }  
                }else {  
                    isNull = false;  
                    break;  
                }  
            }  
        }  
        return isNull;  
    }  
 æµ‹è¯•:
Java代码  
@Test  
    public void test_isNullObject() throws SecurityException,  
            IllegalArgumentException, NoSuchFieldException,  
            IllegalAccessException {  
        Person2 p = new Person2();  
        Assert.assertEquals(true, ReflectHWUtils.isNullObject(p, true));  
        Assert.assertEquals(false, ReflectHWUtils.isNullObject(p, false));  
  
        p.setAddress("beijing");  
        Assert.assertEquals(false, ReflectHWUtils.isNullObject(p, true));  
        Assert.assertEquals(false, ReflectHWUtils.isNullObject(p, false));  
  
        p.setAddress(null);  
        p.setId(0);  
        Assert.assertEquals(true, ReflectHWUtils.isNullObject(p, true));  
        Assert.assertEquals(false, ReflectHWUtils.isNullObject(p, false));  
  
    }  
 Person2 æºä»£ç (省略getter,setter方法):
Java代码  
import java.sql.Timestamp;  
  
public class Person2 {  
    private int id;  
    private int age;  
    private double weight;  
    private String personName;  
    private Timestamp birthdate;  
    public String identitify;  
    protected String address;  
    String phone;  
      
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-10-04
ObjectIsNull o=null; //声明一个对象变量指向空

o=ObjectIsNull(); //指向new出来的对象
第2个回答  2014-10-06
o = null; 然后这个 o对象就为空了。
但是一般为空的情况不是这样的,没有人会这么写,除非为了垃圾回收。
产生null的情况一般为 o = getObject();然后呢,这个getObject()可能会返回一个空对象,这才导致了非空判断的必要性。
第3个回答  2014-10-04
你 new 一个对象的时候它就是一个null的。不需要自己去赋值。追问

本回答被提问者和网友采纳
第4个回答  2014-10-05
(1)当new一个对象时,带内存中就开辟一块空间存放这个实例化对象,这里的o只是对这个对象的引用(相当于c语言中的指针),此时o当然不为空,(2)接着人为赋值null,此时o已经为空了,因为它不在指向任何对象了,它原来指向的对象只能通过Java的gc回收了,(3)接下来a也是指向new出来的对象的引用,但和(1)中所提到o指向的对象不同,因为内存地址不同。最后判定o当然是空了。
不知我解释的够清晰吗?追问

额,可能是我太笨了,不太懂,你可以写几行代码看看么

追答

package test1;

public class SimpleTest {

public static void main(String[] args) {

SimpleTest s1=new SimpleTest();
SimpleTest s2=new SimpleTest();

if(s1!=null && s2!=null){
//很显然s1和s2都不为null
System.out.println("not null");
}
if(s1!=s2){
//很显然s1和s2不相等,因为它们所指的地址空间不同
System.out.println("not equal");
}
s2=null;
if(s1==null){
//s1不为null
System.out.println("s1 is null");
}
if(s2==null){
//s2为null
System.out.println("s2 is null");
}
}

}

相似回答