判断字符串是否为空是在 Android 开发中是最长用的一个判断,判断时也经常会看到有不同的判断方式,今天专门研究了一下,记录下来。
先定义一个字符串,
private String s;
这种定义方式是我们学用的方式,那么这样定义时在字符串时,该怎么判断它是不是空呢?来用代码验证一下:
if (s == null){
Log.e("MainActivity", "s == null");
}else {
Log.e("MainActivity", "s");
}
打出的来 log 是这样的:
12-13 22:57:01.693 5129-5129/com.example.dddd.myapplication E/MainActivity: s == null
可以看到这个时候,如果 s 没有赋值,它就为 null。
现在做一个小改动,这样定义字符串,
private String s = new String();
这时我们这这样来判断,
if (s == null){
Log.e("MainActivity", "s == null");
}else if (s.isEmpty()){
Log.e("MainActivity", "s is empty");
}else {
Log.e("MainActivity", "s");
}
这样打出来的 log 是这样的:
12-13 23:06:35.263 6017-6017/com.example.dddd.myapplication E/MainActivity: s is empty
当用 new 关键字创建字符串对象时,如果 s 没有赋值,那么这时的 s 并不是 null,而它的 isEmpty()方法为 true,这时进入到 isEmpty()方法中去看看,
/**
* Returns {@code true} if, and only if, {@link #length()} is {@code 0}.
*
* @return {@code true} if {@link #length()} is {@code 0}, otherwise
* {@code false}
*
* @since 1.6
*/
public boolean isEmpty() {
// Empty string has {@code count == 0} with or without string compression enabled.
return count == 0;
}
可以看到只有当字符串的长度为 0 时,才会返回 true。所有用 new 关键字创建的字符串对象在没有赋值的情况下它的长度是 0 ,但并不是 null。
还有一个方法是用 TextUtils.isEmpty() 这个方法来判断
if (TextUtils.isEmpty(string)){
Log.d("MainActivity", "string.isempty");
}
进入到这个方法里面去看一看:
/**
* Returns true if the string is null or 0-length.
* @param str the string to be examined
* @return true if str is null or zero length
*/
public static boolean isEmpty(@Nullable CharSequence str) {
return str == null || str.length() == 0;
}
可以看到这个方法是当字符串为 null 或长度为 0 时,返回 true,与 String 的 isEmpty()方法比起来,这个方法更严谨一些,所以可以尽量使用这个方法来避免字符串的空指针异常。
还有一个经常用的判断方法就是 if(s == ""),这个就很简单了,就不多言了。
总结:当没有用 new 关键字创建字符串对象,或是没有 s = "",这两种创建方式的话,是不能用 isEmpty()方法来判断的,那样的话会报空指针异常。所以在判断字符串是否为空时要注意这一点,避免报错。
网友评论