zoukankan      html  css  js  c++  java
  • 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){
    }
  • 相关阅读:
    彻底禁用resource manager
    NYOJ_94 cigarettes 递归VS迭代
    itunes connect上传截图提示无法加载文件问题
    hdu 1165 Eddy&#39;s research II(数学题,递推)
    USACO holstein 超时代码
    金蝶KIS标准版与金蝶K3的差别
    OC第三天(内存管理)
    HDU 1059 Dividing(多重背包)
    说说參数传递(泛型托付)
    Json数组操作小记 及 JSON对象和字符串之间的相互转换
  • 原文地址:https://www.cnblogs.com/svipero/p/12841701.html
Copyright © 2011-2022 走看看