Tips_self:
class="java">if(carService.getFull(assign.getCar().getId()).getKind() != null){
if("机动".equals(carService.getFull(assign.getCar().getId()).getKind().getDisplayName())){
return true;
}
}
--当取到getKind()为空时再getDisplayName()==null会一直报空指针,因为前一个对象getKind已经为空了。
Java 中关于String 对象的空对象(null), 空值(""),空格(" ")对于很多人来说很模糊,下面将分别介绍一下
他们的用法:定义,判断,运算。
首先,先上代码:
[java]
private void testStringNullOrEmpty() {
// 如果s=null代表空对象,即还没创建出对象,就是还没开辟空间,。
// 如果s = ""表示创建出了对象,但是这个对象内容为空,也就是空字符串。
// 如果s = " "表示创建出了对象,但是这个对象内容为不为空,而是空格。
String s = null;
String k = "";
String n = " ";
String t = "ab";
Log.d(TAG, "s = " + s); //output : s = null
Log.d(TAG, "k = " + k); //output : k =
Log.d(TAG, "t = " + t); //output : t = ab
Log.d(TAG, "n = " + n); //output : n =
Log.d(TAG, "t.length() = " + t.length()); //output : t.length() = 2
Log.d(TAG, "k.length() = " + k.length()); //output : k.length() = 0
Log.d(TAG, "n.length() = " + n.length()); //output : n.length() = 1
//equals方法比较的是两个对象的内容是否相同,因此,对象必须有指向的空间,即不能为null,否则,会抛出异常。
Log.d(TAG, "k.equals(null) = " + k.equals(null)); //output : k.equals(null) = false
Log.d(TAG, "k.equals(\"\") = " + k.equals("")); //output : k.equals("") = true
Log.d(TAG, "k.equals(\" \") = " + k.equals(" ")); //output : k.equals(" ") = false
Log.d(TAG, "n.equals(\"\") = " + n.equals("")); //output : n.equals("") = false
Log.d(TAG, "n.equals(\" \") = " + n.equals(" ")); //output : n.equals(" ") = true
// Log.d(TAG, "s.equals(null) = " + s.equals(null)); //异常
Log.d(TAG, "k.isEmpty() = " + k.isEmpty()); //output : k.isEmpty() = true
Log.d(TAG, "n.isEmpty() = " + n.isEmpty()); //output : n.isEmpty() = false
// Log.d(TAG, "s.isEmpty() = " + s.isEmpty()); //异常
Log.d(TAG, "s == null = " + (s == null)); //output : s == null = true
// 在使用"+"caozuofu.html" target="_blank">操作符时,如果有一个操作数是字符串,其他操作数会被转换成字符串
s = s + t;
Log.d(TAG, "after (s + t) s = " + s); //output : after (s + t) s = nullab
Log.d(TAG, "s.length() = " + s.length()); //output : s.length() = 6
Log.d(TAG, "s == null = " + (s == null)); //output : s == null = false
}
定义
空对象:
String s = null;
空对象是指定义一个对象s,但是没有给该对象分配空间,即没有实例化该对象,因此,空对象在调用所有对象方法时候都会抛出异常,如s.length(), s.isEmpty()等方法。
空值:
String k = "";
空值是指一个字符床对象已经实例化,即系统已经给该变量分配了空间,只是对象的内容为空。
空格:
String n = " ";
是指一个字符对象已经实例化,对象的内容为空格。
判断
对于上述三种情况,如何判断一个字符变量属于上述类型,下面主要介绍下方法:
空对象判断:
判断一个字符变量是否是null ,使用 逻辑判断 等于(==)与null对象比较,代码
表达式如下:
s == null;
注意: 空对象不能使用诸如equals(), isEmpty()等对象方法,因为它未被实例化。
空值判断:
判断空值可有
三种方式:
(1)equals方法比较的是两个对象的内容是否相同,可用表达语句:k.equals("") ;
(2) length()方法是查看某个字符串对象的字符个数,可用表达式判断:k.length() == 0 ;
(3) isEmpty()方法是判断某个字符串对象字符个数时候为0,可用表达式判断:k.isEmpty() ;
空格判断:
空格内容为一个空格,虽然在输出显示时候和空值一样,都是空的,但是在系统里面的
内存机制不一样的,空格字符串表示该对象的内存空间里面有内容,是空格,字符个数是1,因此,在使用如下方法时候结果如下:
n.length() 的输出值为1, n.isEmpty()输出为false。
判断语句: n.equals(" ") ;
运算
字符串提供了"+"操作符,表示两个字符串对象可以链接一起,在使用该运算时候,有这样一条规则:如果有一个操作数是字符串,其他操作数会被转换成字符串。
在上面代码s = s + t; s申明时候为空对象,通过"+"时,会将null转化为一个字符串对象。因此结果是nullab。
大家可以对照上面代码
例子,更加详细的了解这三者实现机制。
补充:
对象是否为空过滤空行为空不为空StringUtil
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;
}
参考:org.apache.commons.lang.StringUtils
应用场景:
读取excel文件,转化为一个二维数组:Object[][] arrays
但是excel中有空行,所以需要过滤Object[][] arrays中的空的一维数组:
/***
* 过滤数组中的空元素
*
*
* @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;
}
参阅附件中的方法com.common.util.SystemUtil.filterEmpty