Java 中 String 的 isEmpty() 与 null 与 "" 区别解析

简介: 问:简单说说 String 的 isEmpty() 与 null 与 "" 的区别?答:回答这个问题的最好答案就是代码举例。

问:简单说说 String 的 isEmpty() 与 null 与 "" 的区别?

答:回答这个问题的最好答案就是代码举例。

publicclassTest{

publicstaticvoidmain(String[] args){

String a =newString();

String b ="";

String c =null;

testString(a);

testString(b);

testString(c);

}

privatestaticvoidtestString(String str){

if(str ==null){

System.out.println("null");

}

if(str.isEmpty()){

System.out.println("isEmpty");

}

if(str.equals("")){

System.out.println("\"\"");

}

System.out.println("-------------");

}

}

上面程序段的运行结果如下:

isEmpty

""

-------------

isEmpty

""

-------------

null

Exception in thread"main"java.lang.NullPointerException

Exception in thread"main"java.lang.NullPointerException

-------------

通过程序段运行结果可以看到,a 被分配了内存空间且值为空,是一种有值的绝对空;b 被分配了内存空间且值为空字符串,是一种有值的相对空;c 未分配内存空间且无值,是一种无值状态。 

所以判断一个 String 变量是否是空对象使用其与 null 进行 == 比较,不能使用 equals()、isEmpty()、"" 等进行判断,因为空对象还未被实例化。

而对于 String 的空值判断可以采用三种方法,equals("") 方法比较对象的内容是否为空值,length() == 0 来判断 String 的字符个数是否空值;isEmpty() 方法来判断 String 对象的字符个数是否为空值(其实现原理等价于 length() == 0 )。 

对于空格字符串,虽然在输出显示时候和空值一样,都是空的,但是在运行时空格字符串表示该对象的内存空间里面有内容(是空格,字符个数是空格个数),所以在使用 length() 输出时值为空格个数,使用 isEmpty() 输出为 false,使用 equals("") 判断为 false。

对于 String 的 + 操作符来说,如果有一个操作数是 String,其他操作数会被转换成 String。特别注意,null 与字符串 "XXXX" + 操作会变成 "nullXXXX"。

相关文章
|
9月前
|
JSON 前端开发 Java
【Bug合集】——Java大小写引起传参失败,获取值为null的解决方案
类中成员变量命名问题引起传送json字符串,但是变量为null的情况做出解释,@Data注解(Spring自动生成的get和set方法)和@JsonProperty
|
10月前
|
安全
String、StringBuffer、StringBuilder的区别
String 由 char[] 数组构成,使用了 final 修饰,对 String 进行改变时每次都会新生成一个 String 对象,然后把指针指向新的引用对象。 StringBuffer可变并且线程安全;有一定缓冲区容量,字符串大小没超过容量,不会重新分配新的容量,适合多线程操作字符串; StringBuiler可变并且线程不安全。速度比StringBuffer更快,适合单线程操作字符串。 操作少量字符数据用 String;单线程操作大量数据用 StringBuilder;多线程操作大量数据用 StringBuffer
|
11月前
|
存储 安全 Java
String、StringBuffer 和 StringBuilder 的区别
【10月更文挑战第21天】String、StringBuffer 和 StringBuilder 都有各自的特点和适用场景。了解它们之间的区别,可以帮助我们在编程中更合理地选择和使用这些类,从而提高程序的性能和质量。还可以结合具体的代码示例和实际应用场景,进一步深入分析它们的性能差异和使用技巧,使对它们的理解更加全面和深入。
412 57
|
12月前
|
安全 Java
String、StringBuffer、StringBuilder的区别
这篇文章讨论了Java中String、StringBuffer和StringBuilder的区别。String是不可变的,每次操作都会产生新的对象,效率低且浪费内存。StringBuilder可以在原字符串基础上进行操作,不开辟额外内存,弥补了String的缺陷。StringBuffer和StringBuilder类似,但StringBuffer的方法是线程安全的。文章还列举了StringBuffer的常用方法,并提供了使用示例代码。最后总结了这三者的主要区别。
String、StringBuffer、StringBuilder的区别
|
NoSQL Java Redis
【Azure Spring Cloud】Java Spring Cloud 应用部署到Azure上后,发现大量的 java.lang.NullPointerException: null at io.lettuce.core.protocol.CommandHandler.writeSingleCommand(CommandHandler.java:426) at ... 异常
【Azure Spring Cloud】Java Spring Cloud 应用部署到Azure上后,发现大量的 java.lang.NullPointerException: null at io.lettuce.core.protocol.CommandHandler.writeSingleCommand(CommandHandler.java:426) at ... 异常
154 0
|
Java 测试技术
Java系列之判断字符串是为空或者null
这篇文章介绍了如何在Java中使用`isEmpty()`方法判断字符串是否为空或`null`,并提供了相应的测试用例来演示其用法。
|
安全 Java API
Java系类 之 String、StringBuffer和StringBuilder类的区别
这篇文章讨论了Java中`String`、`StringBuffer`和`StringBuilder`三个类的区别,其中`String`是不可变的,而`StringBuffer`是线程安全的可变字符串类,`StringBuilder`是非线程安全的可变字符串类,通常在单线程环境下性能更优。
Java系类 之 String、StringBuffer和StringBuilder类的区别
|
安全 Java
【Java基础面试二十七】、说一说StringBuffer和StringBuilder有什么区别
这篇文章介绍了Java中StringBuffer和StringBuilder的区别:StringBuffer是线程安全的,而StringBuilder是非线程安全的,因此在单线程环境下优先推荐使用StringBuilder以获得更好的性能。
【Java基础面试二十六】、说一说String和StringBuffer有什么区别
这篇文章区分了Java中的String和StringBuffer类:String是不可变类,一旦创建字符序列就不能改变;而StringBuffer代表可变的字符串,可以通过其方法修改字符序列,最终可以通过`toString()`方法转换为String对象。
【Java基础面试二十六】、说一说String和StringBuffer有什么区别
|
IDE Java 测试技术
如何优雅地根治Java中Null值引起的Bug问题
【8月更文挑战第18天】在Java开发中,null 值是一个既常见又危险的存在。它常常是导致程序崩溃、难以调试的“罪魁祸首”。然而,通过一系列优雅的策略和实践,我们可以有效地减少甚至根除由 null 值引发的Bug。本文将从多个方面探讨如何做到这一点。
212 4

推荐镜像

更多
  • DNS