`

equals--isempty--length

    博客分类:
  • java
 
阅读更多
 

length  与 isempty 相似, null不可以使用,报空指针异常,

new string() 分配了空间,只是没有存储内容

“”空串,length=0

 

 

public static void main(String []ar){
		String a = null;
		String b = new String();
		String c = "";
		String d = "abcd";
		//NullPointerException
		System.out.println(a.isEmpty());
		System.out.println(a.length());
		//true 0 
		System.out.println(b.isEmpty());
		System.out.println(b.length());
		//true 0
		System.out.println(c.isEmpty());
		System.out.println(c.length());
		//false 4
		System.out.println(d.isEmpty());
		System.out.println(d.length());
	}
 

 

 

转;

判断String是否为空的小技巧

博客分类:  
Java代码  收藏代码
  1.              //比较 方法一,大多数人都这么比较  
  2.   
  3.     String param = config.getInitParameter("log-level");  
  4.     if (param != null && !"".equals(param)) {  
  5.         final Level level = Log.getLevel(param);  
  6.         if (level != null) Log.lookup("org.zkoss").setLevel(level);  
  7.         else log.error("Unknown log-level: "+param);  
  8.     }  
  9.             //比较 方法二,(而我研究的源码基本都这么比较)  
  10.              String param = config.getInitParameter("log-level");  
  11.     if (param != null && param.length() > 0) {  
  12.         final Level level = Log.getLevel(param);  
  13.         if (level != null) Log.lookup("org.zkoss").setLevel(level);  
  14.         else log.error("Unknown log-level: "+param);  
  15.     }  
  16.   
  17. // 下面我们看一下equals,length,isEmpty的源码  
  18.   
  19.  //String中equals方法内部代码  
  20.   
  21.  public boolean equals(Object anObject) {  
  22. if (this == anObject) {  
  23.     return true;  
  24. }  
  25. if (anObject instanceof String) {  
  26.     String anotherString = (String)anObject;  
  27.     int n = count;  
  28.     if (n == anotherString.count) {  
  29.     char v1[] = value;  
  30.     char v2[] = anotherString.value;  
  31.     int i = offset;  
  32.     int j = anotherString.offset;  
  33.     while (n-- != 0) {  
  34.         if (v1[i++] != v2[j++])  
  35.         return false;  
  36.     }  
  37.     return true;  
  38.     }  
  39. }  
  40. return false;  
  41.    }  
  42.   
  43.   //String.length()的源码  
  44.   
  45. /** 
  46.     * Returns the length of this string. 
  47.     * The length is equal to the number of <a href="Character.html#unicode">Unicode 
  48.     * code units</a> in the string. 
  49.     * 
  50.     * @return  the length of the sequence of characters represented by this 
  51.     *          object. 
  52.     */  
  53.    public int length() {  
  54.        return count;  
  55.    }  
Java代码  收藏代码
  1.    //String.isEmpty的源码  
  2.  /** 
  3.     * Returns <tt>true</tt> if, and only if, {@link #length()} is <tt>0</tt>. 
  4.     * 
  5.     * @return <tt>true</tt> if {@link #length()} is <tt>0</tt>, otherwise 
  6.     * <tt>false</tt> 
  7.     * 
  8.     * @since 1.6 
  9.     */  
  10.    public boolean isEmpty() {  
  11. return count == 0;  
  12.    }  

 

仅从代码多少以及逻辑判断来看,length,isEmpty都非常简单,对于一般比较判断来说,

 

首先我猜测:length,isEmpty是相差无几的,equals方法就望尘莫及了,

 

 

 

下面做一个测试,证明我们的猜测

 

测试代码如下

 

 

Java代码  收藏代码
  1. private static final String sunflower = "sunflower";  
  2.     private static final int COUNT= 1000000000;  
  3.   
  4.     public static void main(String[] args) {  
  5.         try {  
  6.             Thread.sleep(2000);  
  7.         } catch (InterruptedException e) {  
  8.             e.printStackTrace();  
  9.         }  
  10.   
  11.         System.out.println("开始计算...\n");  
  12.   
  13.         Long begin = System.currentTimeMillis();  
  14.         for (int j = 0; j < COUNT; j++) {  
  15.             testEmptyByLength(sunflower);  
  16.         }  
  17.         calculateDuration("length test", begin);  
  18.   
  19.         begin = System.currentTimeMillis();  
  20.   
  21.         for (int j = 0; j < COUNT; j++) {  
  22.             testEmptyByEmpty(sunflower);  
  23.         }  
  24.   
  25.         calculateDuration("empty test", begin);  
  26.   
  27.         begin = System.currentTimeMillis();  
  28.   
  29.         for (int j = 0; j < COUNT; j++) {  
  30.             testEmptyByEquals(sunflower);  
  31.         }  
  32.         calculateDuration("equals test", begin);  
  33.     }  
  34.   
  35.     public static void calculateDuration(String method, long begin) {  
  36.         System.out.println(method + "\t:"  
  37.                 + (System.currentTimeMillis() - begin) / 1000);  
  38.     }  
  39.   
  40.     public static boolean testEmptyByLength(String str) {  
  41.         return str == null || str.length() < 1;  
  42.     }  
  43.   
  44.     /** 
  45.      * empty方法是jdk1.6添加的方法,如果是早期版本不兼容 
  46.      *  
  47.      * @param str 
  48.      * @return 
  49.      */  
  50.     public static boolean testEmptyByEmpty(String str) {  
  51.         return str == null || str.isEmpty();  
  52.     }  
  53.   
  54.     public static boolean testEmptyByEquals(String str) {  
  55.         return "".equals(str);  
  56.     }  
 

 

输出结果:

 

 

 

 

开始计算(s)

 

length test:0

empty test:0

equlas test:8

 

 

 

 

结论:

 

String.isEmpty()方法是jdk1.6中添加的,其方法体和length()方法一样,从性能和兼容性,length()更好,

 

所以如果对字符串非严格判断是否为空,建议使用String.length>0判断,如果严格判断是否全部为" "字符,就要自己写或者用common lang StringUtils.isBlank了

 

isBlank方法代码补充:

 

 

 

Java代码  收藏代码
  1. /** 
  2.    * <p>Checks if a String is whitespace, empty ("") or null.</p> 
  3.    * 
  4.    * <pre> 
  5.    * StringUtils.isBlank(null)      = true 
  6.    * StringUtils.isBlank("")        = true 
  7.    * StringUtils.isBlank(" ")       = true 
  8.    * StringUtils.isBlank("bob")     = false 
  9.    * StringUtils.isBlank("  bob  ") = false 
  10.    * </pre> 
  11.    * 
  12.    * @param str  the String to check, may be null 
  13.    * @return <code>true</code> if the String is null, empty or whitespace 
  14.    * @since 2.0 
  15.    */  
  16.   public static boolean isBlank(String str) {  
  17.       int strLen;  
  18.       if (str == null || (strLen = str.length()) == 0) {  
  19.           return true;  
  20.       }  
  21.       for (int i = 0; i < strLen; i++) {  
  22.           if ((Character.isWhitespace(str.charAt(i)) == false)) {  
  23.               return false;  
  24.           }  
  25.       }  
  26.       return true;  
  27.   }  
 

 

 

注:本人不是性能主义者,而是追求更好的方法!!

分享到:
评论

相关推荐

    详解Spring的StringUtils踩坑记录

    但是,当我们使用StringUtils.isEmpty(page.getQuery())来判断query是否为空时,却出现了问题。问题的关键代码如下: if (StringUtils.isEmpty(page.getQuery())) { // 省略处理逻辑 } 问题的原因是StringUtils....

    Java语言编码规范(PDF清晰版)

    - 使用`String.isEmpty()`检查空字符串,而不是`== null`或`length() == 0`。 8. **比较操作**: - 使用`equals()`方法比较对象的平等性,而非`==`,除非比较的是基本类型。 - 对于数字比较,使用`==`或`!=`比较...

    Java编码规范

    - 使用`String.isEmpty()`检查字符串是否为空,而非`== null`或`length() == 0`。 10. **并发编程**: - 使用`java.util.concurrent`包提供的并发工具类,避免手动管理线程同步。 - 尽量避免长时间持有锁,以...

    链表----链表构造

    p.data.equals(x)) { p = p.next; ++j; } if (p != null) return j; else return -1; } // 显示链表 public void display() { Node&lt;T&gt; node = head.next; while (node != null) { System.out.print...

    字符串工具类

    `isEmpty(String str)` **功能:** 判断传入的字符串是否为空或长度为零。 **参数:** - `str` - 需要判断的字符串。 **返回值:** - 如果字符串为`null`或其长度小于等于0,则返回`true`;否则返回`false`。 **...

    收集的工具类JUtils(java源码)

    - `JUtils.randomString(int length)`: 生成指定长度的随机字符串,可用于生成唯一标识。 通过对JUtils源码的分析,我们可以看到它覆盖了开发中的多个常见场景,这些工具方法极大地提高了代码的可读性和可维护性。...

    String方法使用方法例子续--android

    - `equals()`: 比较两个字符串的内容是否相等,忽略大小写可以使用`equalsIgnoreCase()`。 - `compareTo()`: 比较字符串的字典顺序,返回值可判断字符串的相对大小。 3. **获取子串** - `substring(int ...

    day10 java

    - `isEmpty()`:判断字符串是否为空(长度为0)。 - `contains(CharSequence s)`:判断字符串是否包含指定的字符序列。 - `equals(Object anObject)`:判断两个字符串是否相等。 - `equalsIgnoreCase(String another...

    常用工具类方法1

    - `equals`: 用于比较两个字符串是否相等,对null值进行了处理。 - `join`: 将数组合并为一个字符串,可以指定分隔符。 - `split`: 分割字符串。 - `EMPTY`: 定义了一个空字符串常量。 2. **org.spring...

    Java经典面试题总结&面试问题大全及答案大全

    - `isEmpty()`: 判断字符串是否为空串。 - **转换功能**: - `getBytes()`: 把字符串转换为字节数组。 - `toCharArray()`: 把字符串转换为字符数组。 - `String.valueOf(char[] chs)`: 把字符数组转换为字符串。...

    剑指offer计划13(双指针简单)---java(csdn)————程序.pdf

    if (s.isEmpty() || s.equals(" ")) return " "; int j = s.length() - 1, i = j; StringBuffer str = new StringBuffer(); while (i &gt;= 0) { while (i &gt;= 0 && s.charAt(i) != ' ') i--; str.append(s....

    如何更好的使用Java8中方法引用详解

    2. **实例方法引用**:如 `String::length`,引用对象实例的方法,需要与Lambda表达式的接收者类型匹配。 3. **构造器引用**:如 `List::new`,用于创建新对象,与工厂方法类似。 在Lambda表达式中,如果只需要调用...

    Java常用类与基础API-String的构造器与常用方法

    System.out.println(s1.equals(s2)); // false System.out.println(s1.equalsIgnoreCase(s2)); // true System.out.println(s1.compareTo(s2)); // 正数 System.out.println(s1.compareToIgnoreCase(s2)); // 0 ...

    Java 面试中有关数据类型常见的 50 个面试题.pdf

    根据给定文件的信息,我们可以总结出... - `equals(Object anObject)`:比较两个字符串是否相等。 - `isEmpty()`:判断字符串是否为空。 以上内容覆盖了给定文件中提到的主要知识点,希望对你准备Java面试有所帮助。

    JavaAPI.doc

    - `endsWith(String str)`,`isEmpty()`,`contains(CharSequence)`,`equals(Object anObject)`和`equalsIgnoreCase(String anotherString)`:这些是用于字符串比较的方法。 - `replace(char oldChar, char ...

    阿里巴巴java开发手册

    - 对于集合和数组,推荐使用`isEmpty()`或`length == 0`检查是否为空。 9. **异常统一入口**: - 统一使用`@ControllerAdvice`和`@ExceptionHandler`处理全局异常。 10. **单元测试**: - 所有的公共方法和重要...

    string类的常用方法.zip

    - `length()`:返回字符串的长度。 - `charAt(int index)`:返回指定索引处的字符。 - `substring(int beginIndex, int endIndex)`:提取子字符串。 - `getBytes()`:将字符串转换为字节数组。 - `setCharAt...

    java大厂200+面试题总结(附答案)

    - 判断功能:equals()、contains()、startsWith()、endsWith()、isEmpty() - 转换功能:getBytes()、toCharArray()、valueOf()、toLowerCase()、toUpperCase()、concat() - 其他功能:replace()、trim()、...

Global site tag (gtag.js) - Google Analytics