在做Java开发的过程中,经常会有一些这样或那样的错误,这些错误在一些或深入浅出、或入门的书里面都有提到过,但是这就像是生活中的一些教训,说多少遍都是白扯,只有自己经历了,才会懂。
但是还是要写下来,一来作为自己的一个总结、反思,二来给不幸看到这篇小博客的同学们一点启发,哪怕在某天写代码的过程中有一瞬间想起来,并在自己的代码 中使用这些小的技巧。虽然不能让程序一下子健壮起来,更不可能一下子让写代码的人高达上,但是至少会减少中午午睡的时候被叫醒去解决问题的次数。
文章十分的浅显,高手、大拿可以直接掠过。
今天就聊聊判断一个字符串是否为空
经常在程序里面需要判断某一个字符串是否是空的,尤其是用在判断方法的参数是否为空,比如:
- /*
- * foo
- * version 1
- */
- public boolean foo(String param){
- //经常用这种方法来判断对象是不是空
- if(param == null || param.equals("")){
- //Some Code
- }
- //Do someting
- }
如果一眼就看出上面代码的问题,说明你的代码已经敲了不少,有可能是吃过空指针的亏,有可能是聪明人一学就会这两种情况都不错,因为后面就不会再因为这样的代码而吃亏了。
下面就想想办法,看看怎么来优化一下。
由于foo这个方法中,if语句是用的或关系,这样的话,由于有个短路判断的存在,当param是null的时候,就不会再执行后面的equals方法了,这样的话可以在一定程度上掩盖这种写法的问题。
但是,当上面的或关系变成且的关系,会出现什么情况呢?回报空指针异常!
这是因为当判断了param==null后,再判断param.equal(""),这时,由于param指向的是null,所以会抛出异常来。
那么把代码改下把,把foo方法变成下面这样:
- /*
- * foo
- * version 2
- */
- public boolean foo(String param){
- //经常用这种方法来判断对象是不是空
- if(param == null && "".equals(param)){
- //Some Code
- }
- //Do someting
- }
这样的话,不论param是否为空,都不会出现异常了。
如果事情就这样结束了该多好,但是回头再看foo的第二版时,发现还是有点儿不大对头,万一哪天我把param==null这半句,少写一个等号,会出现什么呢?先赋值,然后再判断,抛出空指针,太幸运了,在开发阶段就能发现隐含的BUG。
但是假设把if语句变成下面的形式呢:
- if("".equals(param) && param = null)
这时,条件判断是为真的,但是好不容易判断了个非空字符串,没相当又在自己的手里变成空的了!
那么继续优化一下foo吧
- /*
- * foo
- * version 3
- */
- public boolean foo(String param){
- //经常用这种方法来判断对象是不是空
- if(null == param && "".equals(param)){
- //Some Code
- }
- //Do someting
- }
第三版的foo和第二版相比,只是把null和param换了下位置。再来分析一下发现,如果少打一个等号,编译都不会通过了!这就杜绝了我们在判断一个对象的时候无意间修改这个对象。
上面说的这些不只是限于Java有这种问题,在C、C++以及其他语言中都可能会有这样的问题,但是思路都是一样的,这有点类似于写作文,不论是小学生还 是初中生,或者是高中生,以及各种作家,在写记叙文时,都免不了六要素: 人物、时间、地点、事件的起因、经过和结果。
相关推荐
* 将得到的数据以json格式进行输出,如果对象不存在则输出空字符串 * * @param obj * 要转换成json的对象 */ protected String toJson(Object obj) { String json = ""; if (obj != null) { if (isArray...
判断字符串是否为空 检测String是否全是中文 判定输入汉字 编译后的正则表达式缓存 将字符串的第一位转为小写 将字符串的第一位转为大写 下划线命名转为驼峰命名 驼峰命名法转为下划线命名 将异常栈信息转为字符串 ...
第1章 Java开发环境的搭建(教学视频:9分钟) 2 1.1 理解Java 2 1.2 搭建Java所需环境 3 1.2.1 下载JDK 3 1.2.2 安装JDK 4 1.2.3 配置环境 5 1.2.4 测试JDK配置是否成功 7 实例1 开发第一个Java程序 7 第2章 Java...
第1章 Java开发环境的搭建(教学视频:9分钟) 2 1.1 理解Java 2 1.2 搭建Java所需环境 3 1.2.1 下载JDK 3 1.2.2 安装JDK 4 1.2.3 配置环境 5 1.2.4 测试JDK配置是否成功 7 实例1 开发第一个...
第1章 Java开发环境的搭建(教学视频:9分钟) 2 1.1 理解Java 2 1.2 搭建Java所需环境 3 1.2.1 下载JDK 3 1.2.2 安装JDK 4 1.2.3 配置环境 5 1.2.4 测试JDK配置是否成功 7 实例1 开发第一个Java程序 7 第2...
实例070 判断字符串是否为数字 89 实例071 验证IP地址的有效性 90 实例072 鉴别非法电话号码 91 4.3 操作字符串 92 实例073 根据标点符号对字符串进行分行 92 实例074 将字符串的每个字符进行倒序输出 94 实例075 ...
第1章 Java开发环境的搭建(教学视频:9分钟) 2 1.1 理解Java 2 1.2 搭建Java所需环境 3 1.2.1 下载JDK 3 1.2.2 安装JDK 4 1.2.3 配置环境 5 1.2.4 测试JDK配置是否成功 7 实例1 开发第一个Java程序 7 第2章 Java...
第1章 Java开发环境的搭建(教学视频:9分钟) 2 1.1 理解Java 2 1.2 搭建Java所需环境 3 1.2.1 下载JDK 3 1.2.2 安装JDK 4 1.2.3 配置环境 5 1.2.4 测试JDK配置是否成功 7 实例1 ...
Java开发技术大全 电子版 第1篇Java基础知识入门. 第1章Java的开发运行环境2 1.1Java的运行环境与虚拟机2 1.2Java的开发环境4 1.2.1JDK的安装4 1.2.2如何设置系统环境变量6 1.2.3编译命令的使用8 1.2.4解释...
9.2.4 判断字符串的开头和结尾 225 9.2.5 分割字符串 225 9.2.6 在字符串中查找子字符串或字符 226 9.2.7 替换字符串中的内容 226 9.2.8 String对象——磐石刻字 227 9.3 String类的最佳拍档——StringBuffer类...
9.2.4 判断字符串的开头和结尾 225 9.2.5 分割字符串 225 9.2.6 在字符串中查找子字符串或字符 226 9.2.7 替换字符串中的内容 226 9.2.8 String对象——磐石刻字 227 9.3 String类的最佳拍档——StringBuffer类...
众所周知,在程序开发中,难免会遇到需要匹配、查找、替换、判断字符串的情况发生,而这些情况有时又比较复杂,如果用纯编码方式解决,往往会浪费程序员的时间及精力。因此,学习及使用正则表达式,便成了解决这一...
编码转换,怎样实现将GB2312编码的字符串转换为ISO-8859-1编码的字符串。 9.Java中访问数据库的步骤,Statement和PreparedStatement之间的区别。 10.找出下列代码可能存在的错误,并说明原因: 二、JSP&Servlet...
正如上面说的,正则表达式看起来非常复杂,让人害怕,大多数的PHP初学者都会跳过这里,继续下面的学习,但是PHP中的正则表达式有着可以利用模式匹配找到符合条件的字符串、判断字符串是否合乎条件或者用指定的字符...
isEmpty : 判断对象是否为空 isNotEmpty: 判断对象是否非空 编码解码相关 -> EncodeUtils.java -> Test urlEncode : URL 编码 urlDecode : URL 解码 base64Encode : Base64 编码 base64Encode2String: Base64 编码 ...