- 浏览: 460542 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
a464697691:
楼主厉害,现在可以使用了
Proxool houseKeepingSleepTime bug修正 -
chenpi529:
楼主好牛逼
Proxool houseKeepingSleepTime bug修正 -
huangxinyu_it:
多谢楼主了
Proxool houseKeepingSleepTime bug修正 -
kokorodo:
谢谢了!
zk中文开发手册pdf版(基于3.5.1) -
superscorpio:
public void testImportInContex ...
MVEL2.0控制流
//比较 方法一,大多数人都这么比较 String param = config.getInitParameter("log-level"); if (param != null && !"".equals(param)) { final Level level = Log.getLevel(param); if (level != null) Log.lookup("org.zkoss").setLevel(level); else log.error("Unknown log-level: "+param); } //比较 方法二,(而我研究的源码基本都这么比较) String param = config.getInitParameter("log-level"); if (param != null && param.length() > 0) { final Level level = Log.getLevel(param); if (level != null) Log.lookup("org.zkoss").setLevel(level); else log.error("Unknown log-level: "+param); } // 下面我们看一下equals,length,isEmpty的源码 //String中equals方法内部代码 public boolean equals(Object anObject) { if (this == anObject) { return true; } if (anObject instanceof String) { String anotherString = (String)anObject; int n = count; if (n == anotherString.count) { char v1[] = value; char v2[] = anotherString.value; int i = offset; int j = anotherString.offset; while (n-- != 0) { if (v1[i++] != v2[j++]) return false; } return true; } } return false; } //String.length()的源码 /** * Returns the length of this string. * The length is equal to the number of <a href="Character.html#unicode">Unicode * code units</a> in the string. * * @return the length of the sequence of characters represented by this * object. */ public int length() { return count; }
//String.isEmpty的源码 /** * Returns <tt>true</tt> if, and only if, {@link #length()} is <tt>0</tt>. * * @return <tt>true</tt> if {@link #length()} is <tt>0</tt>, otherwise * <tt>false</tt> * * @since 1.6 */ public boolean isEmpty() { return count == 0; }
仅从代码多少以及逻辑判断来看,length,isEmpty都非常简单,对于一般比较判断来说,
首先我猜测:length,isEmpty是相差无几的,equals方法就望尘莫及了,
下面做一个测试,证明我们的猜测
测试代码如下
private static final String sunflower = "sunflower"; private static final int COUNT= 1000000000; public static void main(String[] args) { try { Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("开始计算...\n"); Long begin = System.currentTimeMillis(); for (int j = 0; j < COUNT; j++) { testEmptyByLength(sunflower); } calculateDuration("length test", begin); begin = System.currentTimeMillis(); for (int j = 0; j < COUNT; j++) { testEmptyByEmpty(sunflower); } calculateDuration("empty test", begin); begin = System.currentTimeMillis(); for (int j = 0; j < COUNT; j++) { testEmptyByEquals(sunflower); } calculateDuration("equals test", begin); } public static void calculateDuration(String method, long begin) { System.out.println(method + "\t:" + (System.currentTimeMillis() - begin) / 1000); } public static boolean testEmptyByLength(String str) { return str == null || str.length() < 1; } /** * empty方法是jdk1.6添加的方法,如果是早期版本不兼容 * * @param str * @return */ public static boolean testEmptyByEmpty(String str) { return str == null || str.isEmpty(); } public static boolean testEmptyByEquals(String str) { return "".equals(str); }
输出结果:
开始计算(s)
length test :0
empty test :0
equlas test :8
结论:
String.isEmpty()方法是jdk1.6中添加的,其方法体和length()方法一样,从性能和兼容性,length()更好,
所以如果对字符串非严格判断是否为空,建议使用String.length>0判断,如果严格判断是否全部为" "字符,就要自己写或者用common lang StringUtils.isBlank了
isBlank方法代码补充:
/** * <p>Checks if a String is whitespace, empty ("") or null.</p> * * <pre> * StringUtils.isBlank(null) = true * StringUtils.isBlank("") = true * StringUtils.isBlank(" ") = true * StringUtils.isBlank("bob") = false * StringUtils.isBlank(" bob ") = false * </pre> * * @param str the String to check, may be null * @return <code>true</code> if the String is null, empty or whitespace * @since 2.0 */ public static boolean isBlank(String str) { int strLen; if (str == null || (strLen = str.length()) == 0) { return true; } for (int i = 0; i < strLen; i++) { if ((Character.isWhitespace(str.charAt(i)) == false)) { return false; } } return true; }
注:本人不是性能主义者,而是追求更好的方法!!
评论
12 楼
kissroom112
2010-07-01
不错,确实不错
11 楼
buru
2010-06-29
用1.4, 自己实现isEmpty() equals() equalsIgnorecase()
10 楼
sunflowers
2010-06-29
ansjsun 写道
如果是" "呢???大多数验证为空的时候...空格也要去掉的
我们都是这么写的str!=null&&str.trim().leng()>0
我们都是这么写的str!=null&&str.trim().leng()>0
本文结论部分已有解决方案
9 楼
ansjsun
2010-06-29
如果是" "呢???大多数验证为空的时候...空格也要去掉的
我们都是这么写的str!=null&&str.trim().leng()>0
我们都是这么写的str!=null&&str.trim().leng()>0
8 楼
mathfox
2010-06-29
小技巧,记住了。
7 楼
sunflowers
2010-06-26
代码疏漏,其中判断语句"".equals(param)前却少!操作符
String param = config.getInitParameter("log-level");
if (param != null && "".equals(param)) {
final Level level = Log.getLevel(param);
if (level != null) Log.lookup("org.zkoss").setLevel(level);
else log.error("Unknown log-level: "+param);
}
特此感谢skywen的提醒,
由于他的关注和细心观察,发现了我的bug,
关注他,请点这里skywen
6 楼
yuwenchun
2010-06-26
方法一:
if (param != null && "".equals(param)) { ... }
如果是作为空或者空字符串判断的话,个人觉得要这么写吧
if (param != null && "".equals(param.trim())) { ... }
方法二同上,
个人意见,不知道是否正确。
if (param != null && "".equals(param)) { ... }
如果是作为空或者空字符串判断的话,个人觉得要这么写吧
if (param != null && "".equals(param.trim())) { ... }
方法二同上,
个人意见,不知道是否正确。
5 楼
sunflowers
2010-06-25
woniu1983 写道
俺目前基本用1.5, 常用的就是 equals。
学习了。
LZ 可以吧 isEmpty的代码也贴过来与equals的比较下。
学习了。
LZ 可以吧 isEmpty的代码也贴过来与equals的比较下。
谢谢提醒,已补充
4 楼
woniu1983
2010-06-25
俺目前基本用1.5, 常用的就是 equals。
学习了。
LZ 可以吧 isEmpty的代码也贴过来与equals的比较下。
学习了。
LZ 可以吧 isEmpty的代码也贴过来与equals的比较下。
3 楼
sunflowers
2010-06-25
hadesmile 写道
对于可读性来说,isempty更好
isEmpty可读性确实很好,
2 楼
sunflowers
2010-06-25
hadesmile 写道
对于可读性来说,isempty更好
String.isEmpty()方法是jdk1.6中添加的,其方法体和length()方法一样,从性能和兼容性,length()更好,
1 楼
hadesmile
2010-06-25
对于可读性来说,isempty更好
发表评论
-
什么是Method.isBridge方法
2010-11-18 14:22 3392什么是Method.isBridge方法: ... -
深入讨论Java开发异常的处理
2010-09-19 13:20 6096深入讨论Java开发异常的处理 (深刻讨 ... -
在参数中使用方法时需要注意的问题
2010-08-11 15:41 930/** * 判断虚拟路径的文件是否存在 ... -
IOException while loading persisted sessions: java.io.EOFException异常的解决办法
2010-06-21 10:39 2419严重: IOException while loadin ... -
log4j输出位置配置
2010-05-12 16:41 2414附件内有文件 log4j.rootLogg ... -
java日期时间工具类
2010-04-19 16:11 6507该片文章为重复造轮子,在commons-lang里有日期转换 ... -
MSSQL导致java.net.BindException异常的解决方法
2010-04-15 09:26 2170昨天同事写了一个程序,使用jdbc频繁访问数据库,导致MSSQ ... -
传值传引用,老问题了
2010-04-13 16:31 1068今天犯了一个错误: 例如: public class ... -
Proxool houseKeepingSleepTime bug修正
2009-12-09 09:25 11183修正后jar包在附件内 异常代码: Ca ... -
一个Java程序员应该掌握的10项技能[转]
2009-11-10 21:08 1122一个Java程序员应该掌握的10项技能[转] 1、 ... -
jdk自带工具使用指南
2009-09-19 23:53 1207jdk自带工具使用指南 http://java.sun ... -
类初始化陷阱(续)
2009-08-04 01:58 1249对于前一篇文章http://sunflowers.iteye ... -
jforum2.1.8版本的bug
2009-05-15 00:47 1701转载请注明出处(文章末尾虚线内容必须保留) ... -
java资料经典集合
2009-05-04 19:36 1589本文不断更新,转载请注明出处(文章末尾虚线内容必须保留) ... -
jforum 版主设置
2009-04-20 00:06 4732原文:http://www.trydone.com/p ... -
循环的优化
2008-10-22 13:10 2953循环的优化 --------------------- ... -
父类构造多态调用的陷阱
2008-10-22 13:07 1338class Parent { public Paren ...
相关推荐
在C++编程中,`string`是STL(Standard Template Library,标准模板库)中的一个非常重要的组件,它为字符串操作提供了丰富的功能。对于初学者而言,掌握如何利用`string`进行数字处理是一项基本而重要的技能。本文...
2. **字符串的空值检查**:C#中的字符串提供了`string.IsNullOrEmpty()`方法来检查字符串是否为空或null。例如,`if (string.IsNullOrEmpty(str)) {...}`。 3. **字符串比较**:C#提供了几种比较字符串的方式,包括...
### Java 判断时间大小知识点详解 #### 一、前言 在Java开发中,经常会遇到比较日期或时间大小的问题,特别是在处理用户输入的数据时。本文将详细介绍如何在Java中实现日期与时间的比较,包括使用`...
6. **比较字符串**:`compare()`方法可以进行字符串之间的比较,返回值可以用来判断字符串是否相等或大小关系。 7. **拷贝和赋值**:`copy()`用于将字符串的一部分拷贝到字符数组,`assign()`用于给字符串赋新值。 ...
### 利用指针思想判断是否为回文 在计算机科学中,回文是指一个字符串正着读和反着读都一样的特性。本篇文章将基于提供的文件信息来深入探讨如何利用C语言中的指针思想来判断一个字符串是否是回文。 #### 知识点...
在C++编程语言中,自定义实现`String`类是一个常见的练习,旨在理解对象导向编程的基本概念,如构造函数、赋值运算符重载、比较运算符重载...这有助于提高编程技巧,并为理解和使用标准库中的`std::string`类打下基础。
4. **空值检查**:确认字符串是否为空或者全由空格组成,防止空值引发的程序错误。可以使用`isEmpty()`(Java)或`isspace()`(Python)进行判断。 5. **编码检查**:检查字符串的编码格式,确保在不同系统或平台...
### Java开发中的常用小技巧详解 ... - 使用`isEmpty()`方法代替`equals("")`来判断字符串是否为空。 以上这些技巧不仅可以帮助开发者编写更健壮、易于维护的Java应用程序,还能提高程序的整体性能和安全性。
在C#编程中,有时我们需要将用户输入或者从其他数据源获取的字符串转换为整型数值,以便进行数学计算或与其他整型数据进行比较。...希望这个小例子能帮助您理解如何在实际项目中应用这个转换技巧。
- **空路径或非法路径**:如果传入的路径为空或者不合法(例如路径中包含非法字符),`exists()`方法可能会抛出异常。 - **文件权限问题**:如果程序没有足够的权限访问指定的路径,`exists()`方法可能会返回`false`...
#### 一、编程技巧——判断是否已建立拨号连接 **标题及描述概览:** 本篇文章将深入介绍一种实用的编程技巧,即如何通过编程来判断当前计算机是否已建立拨号(Dial-Up)网络连接。此方法适用于需要检测用户网络...
"判断是否重复输入数据"这个主题聚焦于确保数据库中的信息唯一性,避免冗余和数据不一致。在这个问题中,我们将主要讨论如何在数据库层面和编程语言层面(如C#)检查并防止重复数据的输入。 首先,我们来探讨数据库...
### 知识点一:判断文件是否存在于IE缓存中的技术背景 在早期的Web开发过程中,特别是针对Internet Explorer(IE)浏览器时,开发者经常需要处理浏览器缓存的问题。这是因为浏览器缓存可以显著提高网页加载速度,但...
以下是一些JS中的实用小技巧: 1. **`document.write`**:这是JavaScript中最基本的输出方法,用于向HTML文档中插入动态内容。例如,`document.write("Hello, World!");`会在页面上显示“Hello, World!”。 2. **...
#### 一、精彩编程与编程技巧——判断程序是否在VB6环境下运行 在软件开发过程中,特别是在使用Visual Basic (VB) 进行编程时,有时需要编写一段代码来检测当前程序是否运行在特定的环境中。这对于确保程序兼容性和...
本文主要介绍了Java定义栈结构,并实现入栈、出栈操作,结合完整实例形式分析了java数据结构中栈的定义、以及入栈、出栈、栈是否为空判断、栈大小计算、打印栈元素等相关操作技巧。 一、栈结构定义 在 Java 中,栈...
根据提供的文件信息,本文将详细解释如何通过编程获取指定驱动器的分区信息,并进一步判断该驱动器是否为CD-ROM以及是否插入了光盘。 ### 一、获取分区信息 #### 1.1 函数声明 在VBScript或VBA中,获取分区信息...
### PowerBuilder 小技巧知识点详解 #### 一、在PowerBuilder中如何像资源管理器那样双击打开文件? **知识点1:使用API函数ShellExecuteA实现文件打开** 在PowerBuilder中,想要像Windows资源管理器那样通过双击...
以下是一些关于JS的实用小技巧,对于初学者来说,掌握这些知识点将有助于提升编程效率和理解力。 1. `document.write("")`:这是一个常用的输出语句,常用于在页面加载时动态插入HTML内容。 2. 注释:JS支持单行...
现在可以直接用`myString.IsNullOrEmpty()`来判断字符串是否为空。 6. **枚举与switch-case搭配使用** 枚举是常量集合,与switch-case语句配合使用,可以使代码更清晰、更易于维护。例如: ```csharp switch ...