最近看了一段判断字符串是否为空的代码,对其判断条件不是很理解,代码如下:

public static boolean isEmpty(Object str) {
	if(null == str || "".equals(str) || "null".equals(str)){
	    return true;
	}else{
	    return false;
	  }
}
public static boolean isEmpty(Object str) {
	if(null == str || "".equals(str) || "null".equals(str)){
	    return true;
	}else{
	    return false;
	  }
}

经过查了些资料后明白了,首先null == str这种写法源于C,是为了避免错写成str = null,而且当str是boolean类型时,会通过编译。其次,用"".equals(str)而不用str.equals(""),是因为str如果是一个空引用时,调用str.equals("")会引发一个NullPointException,所以用"".equals(str).

自己写了另外一个版本,用到java的短路现象,代码如下:

public static boolean isNotEmpty(Object str){
    if(str!=null&&!str.equals("null")&&!str.isEmpty()){
        return true;
    }else{
        return false;
    }
}
public static boolean isNotEmpty(Object str){
    if(str!=null&&!str.equals("null")&&!str.isEmpty()){
        return true;
    }else{
        return false;
    }
}

但str判断为null时,jvm就不会再继续往下判断,因此这种判断方式不会引发NullPointException。