java的==、equals、isEmpty的区别
是否分配内存空间 | 值 | 备注 | |
isEmpty() | 是 | 值为空(有值) |
isEmpty()使用的前提是字符串对象已经被分配了内存空间, 如果对象没有被分配空间而使用isEmpty()报空指针错误, isEmpty等同于string.length()==0,比如对字符串对象的引用c: c.isEmpty(), 报NullPointException,而字符串对象的引用a,b都不会。 |
null | 否 | 无值(值不存在) |
null可以用来判断字符串对象的引用是否是空指针, 比如c == null,结果是true,因为c的确是空指针。 |
'''' | 是 | 空字符串 |
空格字符串,虽然在输出显示时候和空值一样,都是空的, 但是在运行时空格字符串表示该对象的内存空间里面有内容 (是空格,字符个数是空格个数),所以在使用 length() 输出时值为空格个数, 使用 isEmpty() 输出为 false,使用 equals("") 判断为 false。 |
举例:
package 字符串; /** * 功能描述:比较isEmpty、Null,equals('')的区别 * * @author nxf * @since 2020-06-29 */ public class testEmptyNull { public static void main(String[] args) { String a = new String(); String b = ""; String c = null; testString(a); testString(b); testString(c); } private static void testString(String str){ if (str == null){ System.out.println("1.null"); } if (str.isEmpty()){ System.out.println("2.isEmpty"); } if (str.equals("")){ System.out.println("3.\"\""); } System.out.println("-------------"); } }
运行结果:
str == null | str.isEmpty() | str.equals("") | |
String a = new String(); | √ | √ | |
String b = ""; | √ | √ | |
String c = null; | √ | 报java.lang.NullPointerException异常 | 报java.lang.NullPointerException异常 |
结论:
1.判断一个 String 变量是否是空对象:与 null 进行 == 比较,不能使用 equals()、isEmpty()、"" 等进行判断,因为空对象还未被实例化。
2.判断String的值是否为空:可以采用equals("") 方法比较对象的内容是否为空值;isEmpty() 方法来判断 String 对象的字符个数是否为空值。
判断一个String为空的安全方法:string == null || string.isEmpty()
参考文献:
【1】Java 中 String 的 isEmpty() 与 null 与 "" 区别解析
【2】永久解决Java String类的isEmpty(),null的区别_玩着玩着就完了的博客-CSDN博客_java string isempty