`
cengjingyiwei
  • 浏览: 31284 次
社区版块
存档分类
最新评论

关于Java空字符串的判断

阅读更多
看到有同事直接用str==""判断字符串是否为空的,以前一直没用过,感到很新奇。回家上网查了一下,判断Java字符串是否为空有四种方法:
假定有字符串String str = "";
1. "".equals(str);//true
2. str.length()==0;//true
3. str.isEmpty();//true,jdk 6以后的新方法。
4. str == "";//true
如果进行一个几亿次的循环去测试这四种方法的运行效率的话,第一种是最慢的,后三种时间差不多,纳秒级比较的话,最后一种判断方法是最快的。
网上也说最后一种是最直观的,也是推荐的写法。
可是记得当初学习java的时候,在学习字符串这一块,任何资料都反复强调,在比较字符串是否相等的时候不能用==,要用equals()方法,难道对于空字符串是个例外?
简单的写了几个测试方法测试了一下:
1. 下面返回的是true,因为众所周知,字符串常量是保存在字符串常量池中的,而且相同字符串在常量池中只保存一份,所以下面的两个空字符串引用的地址是相同的,所以为true。
public class TestString
{
    public static void main(String[] args){
        String str = "";
        System.out.println(str=="");//true
    }
}

2.继续测试,下面的结果也为true,原因同上。
     String str = "abc";
     System.out.println(str=="abc");//true

3.继续测试,下面的结果竟然仍为true。细究原因,应该是编译器在编译时就对代码进行了优化,这种写法得到的字节码文件应该与上面的相同。
     String str = "a" + "bc";
     System.out.println(str=="abc");//true

4. 下面的结果为false,因为我们对字符串进行了运算,此时得到的变量str,虽然值也是"abc",但是却是指向堆内存地址的"abc",所以结果为false。
     String str = "a";
     String str += "bc";
     System.out.println(str=="abc");//false

一般不会出现类似的运算结果为空字符串的情况,貌似可以采用第四种方法直接用==去判断是否为空。但真的是这样的吗?
5.继续以上测试,一般我们得到的字符串都是函数返回值,如果一个函数返回空字符串是以return "";的形式返回,采用双等号判断自然是可行的。可是另一种常见的情况,我们在函数中对于多次修改的字符串是以StringBuffer进行操作的。最后用toString()返回字符串,此时:
        StringBuffer sb = new StringBuffer();
        //... ... 
        //假如在一系列操作后,sb仍为空。
        System.out.println(sb.toString().length() == 0);//true
        System.out.println(sb.toString() == "")//false

因为StringBuffer类的字符串是指向堆内存的。
综上,所以我们在不明确调用的函数内部实现时,最好不要用==进行空字符串判断。
推荐第二种和第三种方法。
分享到:
评论
2 楼 cengjingyiwei 2012-11-09  
南方小鬼 写道
一直用第三种

恩,如果不考虑向1.6之前jdk的话,我也觉得第三种是最易懂的,见名知义。
1 楼 南方小鬼 2012-11-09  
一直用第三种

相关推荐

    判断字符串是否为空

    判断字符串是否为空判断字符串是否为空判断字符串是否为空

    JAVA判断字符串是否为数字字符

    1. **空字符串处理**:上述代码对于空字符串(即长度为0的字符串)直接返回`false`。根据实际需求,也可以考虑抛出异常或给出更友好的提示。 2. **性能考量**:对于大量数据的实时验证,频繁使用正则表达式可能会对...

    java中常用字符串方法总结

    15. **空字符串检查** `isEmpty()`方法判断字符串是否为空。 16. **复制字符串** `repeat(int count)`方法在Java 11中引入,用于重复字符串`count`次。 17. **字符串编码与解码** `getBytes()`将字符串转换为...

    【JS】Java 判断字符串是否为空的三种方法

    在Java编程中,经常需要判断字符串是否为空(null 或者空字符串)。为了确保程序的健壮性和避免NullPointerException等异常,掌握正确的字符串判断方法至关重要。本文将详细介绍三种常用的判断字符串是否为空的方法...

    java 字符串操作类

    在这个类中,我们可以找到包括分隔、插入、判断字符串状态(空或非空)、去除空格等多种功能,这些都是在实际项目中非常实用的。 1. **字符串分隔**: `split()` 方法是字符串分隔的核心,它通常用于将一个字符串...

    java字符串操作大全

    ### Java字符串操作大全 本文将详细介绍Java中字符串的各种操作方法,包括基本的字符串处理功能以及更高级的操作技巧。这些知识点对于Java初学者来说至关重要,并且能够帮助开发者更好地理解和运用Java中的字符串类...

    求字符串中的第一个数字

    1. **空或空字符串检查**: - 如果输入字符串为空或长度为零,则直接返回 `-1`,表示没有数字。 2. **首字符检查**: - 获取字符串的第一个字符 `c`。 - 如果 `c` 是数字(通过 `c >= '0' && c 判断),则将其...

    Java中String判断值为null或空及地址是否相等的问题

    总结来说,理解Java中`null`、空字符串`""`的区别,以及如何安全地进行比较,是编写健壮代码的关键。同时,了解字符串对象的内存地址和内容相等性的差异,可以帮助我们更好地理解和调试程序。在实际开发中,应始终...

    判断字符串格式的时间

    其中,`IsMatch` 方法用于判断指定的字符串是否与正则表达式匹配。 #### 2. IsMatch 方法详解 在提供的代码示例中,使用了 `IsMatch` 方法来进行字符串格式验证。具体代码如下: ```csharp public int IsDate...

    java字符串替换 代码转换相关源码.rar

    java字符转换类代码,可以实现判断字符串是否为空,并删除首尾空格,字符串替换函数,代码转换,GBK转换为ISO-8859-1,代码转换 从srcCode转换为destCode,代码转换,GBK转换为big5,替换非法字符,标记本身等于分隔...

    理解java中的字符串的内存分配

    比较这两个变量时,应该使用 `if (str1 == null)` 来判断 `str1` 是否为 `null`,而使用 `if (str2.equals(""))` 来判断 `str2` 是否为空字符串。 #### 变量字符串与常量字符串的区别 考虑以下代码: ```java ...

    java if判断字符串非空.docx

    "".equals(a))`:这种方法通过比较字符串与空字符串`""`来判断其是否为空。因为`a`是一个空字符串,所以这个条件表达式的结果为`false`。 - `if (c.trim().equals(null))`:`trim()`方法用于移除字符串开头和结尾的...

    Java判断字符串是否为IP地址的方法

    Java判断字符串是否为IP地址的方法 Java判断字符串是否为IP地址的方法是指通过编写特定的方法来判断输入的字符串是否符合IP地址的格式。这种方法在实际开发中非常有用,特别是在网络编程和网络安全等领域。 在Java...

    java 去掉重复字符 三个方法

    我们也可以使用`StringBuilder`和`while`循环来实现相同的功能,不过这种方式相对复杂一些,需要判断字符是否已存在于结果字符串中。 ```java public String removeDuplicates(String str) { StringBuilder result...

    Java判断字符串是否是整数或者浮点数的方法

    在Java编程语言中,处理字符串数据时经常需要判断一个字符串是否可以转换为整数或浮点数。这在数据验证、输入处理或解析用户输入时非常有用。本篇文章将详细介绍如何使用Java来实现这个功能。 首先,我们来看如何...

    java判断一个字符串是否是小数的方法

    以下是关于 Java 判断一个字符串是否是小数的方法的详细介绍: 一、matches() 方法 在 Java 中,我们可以使用 matches() 方法来判断一个字符串是否匹配给定的正则表达式。matches() 方法的语法为:public boolean ...

    截取指定长度的字符串

    在实际应用中,我们可能还需要考虑一些边缘情况,例如当截取的长度超过了字符串的实际长度,这时通常会返回整个字符串或者空字符串,具体取决于编程语言的实现。 标签“字符串 截取”提示我们关注的重点在于理解和...

    Java判断字符串为空、字符串是否为数字

    在Java编程语言中,处理字符串是常见的任务,其中包括判断字符串是否为空以及判断字符串是否只包含数字。在这篇文章中,我们将深入探讨这两种情况的检查方法。 首先,我们来讨论如何判断一个字符串是否为空。在Java...

    (Java)反转字符串单词,但不改变标点符号的位置

    在上面的代码中,我们使用了Java的Character类来判断字符是否为字母,并使用了Stack类来实现反转字符串单词的操作。这种方法可以高效地实现反转字符串单词的操作,而不改变标点符号的位置。 Java反转字符串单词不...

Global site tag (gtag.js) - Google Analytics