判断字符串是否为空

一、判断一个字符串str不为空的方法有:

1、str == null;

2、"".equals(str);

3、str.length <= 0;

4、str.isEmpty();

注意:length是属性,一般集合类对象拥有的属性,取得集合的大小。

 

            例如:数组.length就是取得数组的长度。
          length()是方法,一般字符串类对象有该方法,也是取得字符串长度。
            例如:字符串.length();

说明:

  1、null表示这个字符串不指向任何的东西,如果这时候你调用它的方法,那么就会出现空指针异常。

  2、""表示它指向一个长度为0的字符串,这时候调用它的方法是安全的。
  3.、null不是对象,""是对象,所以null没有分配空间,""分配了空间,例如:

    String str1 = null; str引用为空 
    String str2 = ""; str引用一个空串

    str1还不是一个实例化的对象,而str2已经实例化。

    对象用equals比较,null用等号比较。

    如果str1=null;下面的写法错误: 
       if(str1.equals("")||str1==null){ } 
   正确的写法是 if(str1==null||str1.equals("")){ //所以在判断字符串是否为空时,先判断是不是对象,如果是,再判断是不是空字符串 }

  4. 所以,判断一个字符串是否为空,首先就要确保他不是null,然后再判断他的长度。
     String str = xxx;
     if(str != null && str.length() != 0) { }

二、以下是Java 判断字符串是否为空的四种方法:

四种方法执行的效率分别如下:

JudgeString1耗时:625ms
JudgeString2耗时:125ms
JudgeString3耗时:234ms
JudgeString4耗时:109ms

 

[java] view plain copy
 
  1. /** 
  2.  * Created with IntelliJ IDEA. 
  3.  * User: Administrator 
  4.  * Date: 14-1-16 
  5.  * Time: 上午10:43 
  6.  * 判断字符串是否为空的效率问题 
  7.  */  
  8. public class JudgeStringIsEmptyOrNot {  
  9.     public static void main(String[] args) {  
  10.         JudgeString1("w_basketboy", 10000);  
  11.         JudgeString2("w_basketboy", 10000);  
  12.         JudgeString3("w_basketboy", 10000);  
  13.         JudgeString4("w_basketboy", 10000);  
  14.     }  
  15.   
  16.     /** 
  17.      * 方法一: 最多人使用的一个方法, 直观, 方便, 但效率很低; 
  18.      * 方法二: 比较字符串长度, 效率高, 是最好的一个方法; 
  19.      * 方法三: Java SE 6.0 才开始提供的方法, 效率和方法二几乎相等, 但出于兼容性考虑, 推荐使用方法二; 
  20.      * 方法四: 这是一种比较直观,简便的方法,而且效率也非常的高,与方法二、三的效率差不多; 
  21.      */  
  22.     public static void JudgeString1(String str, long num) {  
  23.         long startTiem = System.currentTimeMillis();  
  24.         for (int i = 0; i < num; i++) {  
  25.             for (int j = 0; j < num; j++) {  
  26.                 if (str == null || "".equals(str)) {  
  27.   
  28.                 }  
  29.             }  
  30.         }  
  31.         long endTime = System.currentTimeMillis();  
  32.         System.out.println("function1耗时:" + (endTime - startTiem) + "ms");  
  33.     }  
  34.   
  35.     public static void JudgeString2(String str, long num) {  
  36.         long startTiem = System.currentTimeMillis();  
  37.         for (int i = 0; i < num; i++) {  
  38.             for (int j = 0; j < num; j++) {  
  39.                 if (str == null || str.length() <= 0) {  
  40.   
  41.                 }  
  42.             }  
  43.         }  
  44.         long endTime = System.currentTimeMillis();  
  45.         System.out.println("function4耗时:" + (endTime - startTiem) + "ms");  
  46.     }  
  47.   
  48.     public static void JudgeString3(String str, long num) {  
  49.         long startTiem = System.currentTimeMillis();  
  50.         for (int i = 0; i < num; i++) {  
  51.             for (int j = 0; j < num; j++) {  
  52.                 if (str == null || str.isEmpty()) {  
  53.   
  54.                 }  
  55.             }  
  56.         }  
  57.         long endTime = System.currentTimeMillis();  
  58.         System.out.println("function3耗时:" + (endTime - startTiem) + "ms");  
  59.     }  
  60.   
  61.     public static void JudgeString4(String str, long num) {  
  62.         long startTiem = System.currentTimeMillis();  
  63.         for (int i = 0; i < num; i++) {  
  64.             for (int j = 0; j < num; j++) {  
  65.                 if (str == null || str == "") {  
  66.   
  67.                 }  
  68.             }  
  69.         }  
  70.         long endTime = System.currentTimeMillis();  
  71.         System.out.println("function4耗时:" + (endTime - startTiem) + "ms");  
  72.     }  
  73. }  
 
===========================================
Java中isEmpty和null以及“”的区别


Java中isEmpty和null以及“”的区别,这是一个比较容易混淆的概念,为了弄清楚这个问题,最好的方法当然是写程序来验证,上代码吧:

*
*/
package JavaTest;
/**
* @author wxwevenpc
* @version 1.0 2012-11-25
*/
public class TestNull {
/**
* @param args
*/
public static void main(String[] args) {
String a = new String();
String b = "";
String c = null;
if(a.isEmpty())
{
System.out.println("String a = new String");
}
if(b.isEmpty())
{
System.out.println("String b = \"\"");
}
if(c==null)
{
System.out.println("String c =null");
}
if(null == a) {
System.out.println("String a =null");
}
if(a=="")
{
System.out.println("a = ''");
}
}
}
以上输出:

String a = new String
String b = ""
String c =null
分析:

此时a是分配了内存空间,但值为空,是绝对的空,是一种有值(值存在为空而已)

此时b是分配了内存空间,值为空字符串,是相对的空,是一种有值(值存在为空字串)

此时c是未分配内存空间,无值,是一种无值(值不存在)

posted on 2017-07-24 11:38  小西红柿  阅读(609)  评论(0)    收藏  举报

导航