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){ }