通常情况下,我们需要去推断一个字符串变量是否为空,今天,我特意做了一个小测试

StringUtils.java:

package com.yx.equipment_collection.utils;

import android.annotation.SuppressLint;
import android.text.TextUtils;
import android.util.Log; /**
*
* 此类描写叙述的是: String帮助类
*
* @author: CS YX
* @version:1.0
* @date:2014-10-21 下午2:47:08
*/
public class StringUtils {
private static final String TAG = "StringUtils";
private static int count = 100000000; public static void checkEmpty1(String str) {
long start = System.currentTimeMillis();
for (int i = 0; i < count; i++) {
if (str == null || str.length() < 1) {
}
}
long end = System.currentTimeMillis();
Log.i(TAG, "checkEmpty1 --- " + (end - start));
} @SuppressLint("NewApi")
public static void checkEmpty2(String str) {
long start = System.currentTimeMillis();
for (int i = 0; i < count; i++) {
if (str == null || str.isEmpty()) {
}
}
long end = System.currentTimeMillis();
Log.i(TAG, "checkEmpty2 --- " + (end - start));
} public static void checkEmpty3(String str) {
long start = System.currentTimeMillis();
for (int i = 0; i < count; i++) {
if (str == null || str == "") {
}
}
long end = System.currentTimeMillis();
Log.i(TAG, "checkEmpty3 --- " + (end - start));
} public static void checkEmpty4(String str) {
long start = System.currentTimeMillis();
for (int i = 0; i < count; i++) {
if (str == null || str.equals("")) {
}
}
long end = System.currentTimeMillis();
Log.i(TAG, "checkEmpty4 --- " + (end - start)); } public static void checkEmpty5(String str) {
long start = System.currentTimeMillis();
for (int i = 0; i < count; i++) {
if (str == null || TextUtils.isEmpty(str)) {
}
}
long end = System.currentTimeMillis();
Log.i(TAG, "checkEmpty5 --- " + (end - start)); } public static void checkEmpty11(String str) {
long start = System.currentTimeMillis();
for (int i = 0; i < count; i++) {
if (str != null && str.length() > 0) {
}
}
long end = System.currentTimeMillis();
Log.i(TAG, "checkEmpty11 --- " + (end - start));
} @SuppressLint("NewApi")
public static void checkEmpty22(String str) {
long start = System.currentTimeMillis();
for (int i = 0; i < count; i++) {
if (str != null && !str.isEmpty()) {
}
}
long end = System.currentTimeMillis();
Log.i(TAG, "checkEmpty22 --- " + (end - start));
} public static void checkEmpty33(String str) {
long start = System.currentTimeMillis();
for (int i = 0; i < count; i++) {
if (str != null && str != "") {
}
}
long end = System.currentTimeMillis();
Log.i(TAG, "checkEmpty33 --- " + (end - start));
} public static void checkEmpty44(String str) {
long start = System.currentTimeMillis();
for (int i = 0; i < count; i++) {
if (str != null && !str.equals("")) {
}
}
long end = System.currentTimeMillis();
Log.i(TAG, "checkEmpty44 --- " + (end - start)); } public static void checkEmpty55(String str) {
long start = System.currentTimeMillis();
for (int i = 0; i < count; i++) {
if (str != null && !TextUtils.isEmpty(str)) {
}
}
long end = System.currentTimeMillis();
Log.i(TAG, "checkEmpty55 --- " + (end - start)); } }

測试为空例如以下:test

	public void test() {
String str = "";
Log.i("test", "str=\"\"---");
StringUtils.checkEmpty1(str);
StringUtils.checkEmpty2(str);
StringUtils.checkEmpty3(str);
StringUtils.checkEmpty4(str);
StringUtils.checkEmpty5(str);
str = null;
Log.i("test", "str=null---");
StringUtils.checkEmpty1(str);
StringUtils.checkEmpty2(str);
StringUtils.checkEmpty3(str);
StringUtils.checkEmpty4(str);
StringUtils.checkEmpty5(str);
str = "null";
Log.i("test", "str=\"null\"---");
StringUtils.checkEmpty1(str);
StringUtils.checkEmpty2(str);
StringUtils.checkEmpty3(str);
StringUtils.checkEmpty4(str);
StringUtils.checkEmpty5(str);
str = new String();
Log.i("test", "str=new String()---");
StringUtils.checkEmpty1(str);
StringUtils.checkEmpty2(str);
StringUtils.checkEmpty3(str);
StringUtils.checkEmpty4(str);
StringUtils.checkEmpty5(str); }

測试结果输入例如以下图:

由此图能够看出方法3(str == "")用时是最少的;其次就是方法1(str.length() < 1)和方法2(str.isEmpty()) ;

方法4(str.equals(""))耗时较多;方法5(TextUtils.isEmpty(str))最耗时

測试非空例如以下:test

	public void test1() {
String str = "";
Log.i("test", "str=\"\"---");
StringUtils.checkEmpty11(str);
StringUtils.checkEmpty22(str);
StringUtils.checkEmpty33(str);
StringUtils.checkEmpty44(str);
StringUtils.checkEmpty55(str);
str = null;
Log.i("test", "str=null---");
StringUtils.checkEmpty11(str);
StringUtils.checkEmpty22(str);
StringUtils.checkEmpty33(str);
StringUtils.checkEmpty44(str);
StringUtils.checkEmpty55(str);
str = "null";
Log.i("test", "str=\"null\"---");
StringUtils.checkEmpty11(str);
StringUtils.checkEmpty22(str);
StringUtils.checkEmpty33(str);
StringUtils.checkEmpty44(str);
StringUtils.checkEmpty55(str);
str = new String();
Log.i("test", "str=new String()---");
StringUtils.checkEmpty11(str);
StringUtils.checkEmpty22(str);
StringUtils.checkEmpty33(str);
StringUtils.checkEmpty44(str);
StringUtils.checkEmpty55(str);
}

測试结果例如以下图:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveWFuZ194aW5nXw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center">

如上图所看到的,首先是方法33(str != null && str != "")比較占优势。方法11(str != null && str.length() > 0)和方法22(str != null && !str.isEmpty())整体来说。不相上下;

方法44(str != null && !str.equals(str != null && !TextUtils.isEmpty(str)))较耗时;方法55()还是最耗时

也有人说,用‘==’推断字符串不准确,应该用‘equals’,个人认为String一般都是直接=定义,想必没有几个人定义一个字符串会new出来吧。

为什么TextUtils.isEmpty()耗时最多,查看源代码原来isEmpty()已经推断了‘==null’:

    /**
* Returns true if the string is null or 0-length.
* @param str the string to be examined
* @return true if str is null or zero length
*/
public static boolean isEmpty(CharSequence str) {
if (str == null || str.length() == 0)
return true;
else
return false;
}

源代码还用于.length()推断,假设你想‘==’不靠谱。推荐使用.length()对于推理方法!

不是单纯的个人意见......谢谢




Android比较字符串是空的(isEmpty)的更多相关文章

  1. C#判断字符串为空

    string str = null; if (string.IsNullOrWhiteSpace(str)) { MessageBox.Show("字符串为null"); } if ...

  2. C#判断字符串为空的几种方法和效率判断

    C#判断字符串为空的几种方法和效率判断 string定义 1.1 string str1="":会定义指针(栈),并在内存里划一块值为空的存储空间(堆),指针指向这个空间.1.2 ...

  3. java 字符串为空问题

    java 字符串为空问题 String testStr = null; System.out.println(testStr); if (testStr == null) { System.out.p ...

  4. Jquery取小数后边2位,N位;jQuery去掉字符串首尾空字符串

    function fix(num, N) { , N); return Math.round(num * base) / base; } 实例,取小数后边两位 var yhmoney2 = fix(1 ...

  5. Shell脚本中字符串判空:使用-z 字符串长度为0时,为真,-n字符串长度不为0,为真。这两个都不靠谱【转】

    最近发现使用  -z   和  -n  来判断字符串判空,或不空时,很不靠谱. 使用下面的方法最可靠: if [ "x${value}" == "x" ]    ...

  6. shell脚本----if(数字条件,字符串条件,字符串为空)

    二元比较操作符,比较变量或者比较数字. 注意数字与字符串的区别. 1.整数比较  -eq 等于,如:if [ "$a" -eq "$b" ] -ne 不等于,如 ...

  7. C# 判断字符串为空(长度为0),或者是null(没有new)

    string str = null; if (string.IsNullOrWhiteSpace(str)) { MessageBox.Show("字符串为null"); } ) ...

  8. C# 判断字符串为空的4种方法及效率

    在程序开发过程中,少不了要处理字符串,并且常常要判断字符串是否为空,通常有哪些判断方法,以及不同方法的效率又怎么样? 在 C# 中,通常有三种判断字符串是否为空的方法,下面分别探讨. 1.str.Le ...

  9. Linux shell 判断字符串为空等常用命令

    1.判断字符串为空 if [ -z "$str" ]; then echo "empty string" fi 2.判断文件是否存在 if [ -f /home ...

随机推荐

  1. 如何查看VS中预设的路径变量

    类似"$(VCInstallDir)"之类的变量查询方法为:打开VS命令行提示窗口,输入 Set 命令. VS中“Tool” - “Visual Studio Command Pr ...

  2. 测试markdown语法

    测试使用markdown 这是无序列表 空调 洗衣机 电脑 这是有序列表 西瓜 哈密瓜 火龙果 下划线bingo 测试 斜体好丑 粗体很赞 测试插入代码 $(document).ready(funct ...

  3. Qt控件精讲一:按钮

    原地址:http://blog.csdn.net/yuxikuo_1/article/details/17397109 Qt Creater提供6种Button控件.如图1. Button控件介绍 控 ...

  4. MFC 在对话框显示图片的多种方法(四种方法)

    我们先从简单的开始吧.先分一个类: (一) 非动态显示图片(即图片先通过资源管理器载入,有一个固定ID) (二) 动态载入图片(即只需要在程序中指定图片的路径即可载入) 为方便说明,我们已经建好一个基 ...

  5. 实战ajax

    原文:实战ajax 实战ajax Ajax的原理简单来说通过XmlHttpRequest对象来向服务器发异步请求,从服务器获得数据,然后用javascript来操作DOM而更新页面. 大家都知道aja ...

  6. Maven坐标 groupId artifactId version packaging classifier name

    groupId定义项目属于哪个组,这个组往往和项目所在的组织或公司存在关联.譬如在googlecode上建立一个名为myapp的项目,那么groupId就应该是com.googlecode.myapp ...

  7. Hadoop基于文件的数据结构及实例

    基于文件的数据结构 两种文件格式: 1.SequenceFile 2.MapFile SequenceFile 1.SequenceFile文件是Hadoop用来存储二进制形式的<key,val ...

  8. Swift - 使用TableView的静态单元格进行页面布局

    通过使用静态单元格的列表,我们可以很方便的进行页面布局.下面通过一个“添加任务页面”来进行演示. 效果图如下: 实现步骤: 1,在storyboard中拖入一个TableViewController, ...

  9. JQuery - 判断radio是否选中,获取选中值

    代码: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3. ...

  10. 构建基于Jenkins + Github的持续集成环境

    搭建持续集成首先要了解什么是持续集成,带着明确的目标去搭建持续集成环境才能让我们少走很多弯路.持续集成(Continuous integration)简称CI,是一种软件开发的实践,可以让团队在持续集 ...