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){
}
原文地址:https://www.cnblogs.com/svipero/p/12841701.html