`

JAVA-null或空值的判断处理

    博客分类:
  • Java
 
阅读更多

1,错误用法一:

if (name == "") {
     //do something
}

2,错误用法二:
if (name.equals("")) {
     //do something
}


3,错误用法三:
if (!name.equals("")) {
     //do something
}


我们来解说一下:
上述错误用法1是初学者最容易犯,也最不容易被发现的错误,因为它们的语法本身没问题,Java编译器编译时不报错。但这种条件可能在运行时导致程序出现bug,永远也不会为true,也就是时说,if块里的语句永远也不会被执行。

上述用法二,用法三 的写法,是包括很多Java熟手也很容易犯的错误,为什么是错误的呢?也许你会感到纳闷。
对,它们的写法本身没错,但是,少了一个null判断的条件,试想,如果name=null的情况下,会发生什么后果呢?后果是,你的程序将抛出NullPointerException异常,系统将被挂起,不再提供正常服务。
当然,如果之前已经对name作了null判断的情况例外。

正确的写法应该先加上name != null的条件,如例:

if (name != null && !name.equals("")) {
     //do something
}

或者

if (!"".equals(name)) {//将""写在前头,这样,不管name是否为null,都不会出错。
     //do something
}


下面,我们举一个简单的例子:

TestNullOrEmpty.java

public class TestNullOrEmpty {

    public static void main(String[] args) {
         String value = null;
         testNullOrEmpty(value);
        
         value = "";
         testNullOrEmpty(value);
        
         value = "";
         testNullOrEmpty(value);
        
         value = "hello me!";
         testNullOrEmpty(value);
     }
    
    static void testNullOrEmpty(String value) {
        if (value == null) { //正确的写法
             System.out.println("value is null.");
         } else if ("".equals(value)) { //正确的写法
             System.out.println("value is blank but not null.");
         } else {
             System.out.println("value is \"" + value + "\"");
         }
        
        if (value == "") {  //NG 错误的写法
        //别用这种写法
         }
     }
}


编译执行:
c:\>javac TestNullOrEmpty.java

c:\>java TestNullOrEmpty
value is null.
value is blank but not null.
value is " "
value is "hello me!"

 

引自博客:

http://garlics.blog.51cto.com/2682515/895865

分享到:
评论

相关推荐

    Java中String判断值为null或空及地址是否相等的问题

    主要介绍了Java中String判断值为null或空及地址是否相等的问题,文中举了简单的例子对字符串类型的值和地址问题进行讲解,需要的朋友可以参考下

    JAVA判断空值方法原理解析

    主要介绍了JAVA判断空值方法原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

    SpringBoot项目中处理返回json的null值(springboot项目为例)

    本文以spring boot项目为例给大家介绍SpringBoot项目中处理返回json的null值问题,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友参考下

    精髓Oralcle讲课笔记

    5、--任何含有空值的数学表达式,最后的计算结果都是空值。 6、select ename||sal from emp; --(将sal的查询结果转化为字符串,与ename连接到一起,相当于Java中的字符串连接) 7、select ename||'afasjkj' from...

    kellerMapper.jar

    ObjectUtils.java:Object 工具类,用于对象的空值判断 StringUtils.java:字符串工具类,用于生成指定格式的字符串及对字符串进行各种处理 使用方式 实体类继承 BaseEntity 并使用注解 @TableAttribute(name = ...

    java时间格式大全(算法源码)

    java时间格式大全(算法源码) java,date,时间,时间格式,算法源码 * * @return */ public static String getTimeShort() { SimpleDateFormat formatter = new SimpleDateFormat("HH:mm:ss"); Date currentTime...

    正则表达式

    /\s+java\s+/ //匹配字符串"java" ,并且该串前后可以有一个或多个空格. /[^"] * / //匹配零个或多个非引号字符. 正则表达式的复制字符 字符 含义 ________________________________________________________...

    sesvc.exe 阿萨德

    如果 key 为空,则 put 一个空值进去。 根据 key 计算出 hashcode。 根据计算出的 hashcode 定位出所在桶。 如果桶是一个链表则需要遍历判断里面的 hashcode、key 是否和传入 key 相等,如果相等则进行覆盖,并返回...

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

    Access 微软 Access是一种桌面数据库,只适合数据量少的应用,在处理少量 数据和单机访问的数据库时是很好的,效率也很高 小型企业 三、 Oracle数据库概述 ORACLE数据库系统是美国ORACLE公司(甲骨文)提供的以...

    freemarker总结

    这里所说的空值,实际上也包括那些并不存在的变量,对于一个Java的 null值而言,我们认为这个变量是存在的,只是它的值为null,但对于FreeMarker模板而言,它无法理解null值,null值和不存在的变 量完全相同. 为了处理缺失...

    hive函数大全(中文版)

    7. 空值判断: IS NULL 5 8. 非空判断: IS NOT NULL 6 9. LIKE比较: LIKE 6 10. JAVA的LIKE操作: RLIKE 6 11. REGEXP操作: REGEXP 7 二、数学运算: 7 1. 加法操作: + 7 2. 减法操作: - 7 3. 乘法操作: * 8 4. 除法...

    Oracle练习笔试大全

    5、任何含有空值的数学表达式,最后的计算结果都是空值。 6、select ename||sal from emp; //(将sal的查询结果转化为字符串,与ename连接到一起,相当于Java中的字符串连接) 7、select ename||'afasjkj' from emp;...

    SharePreferences:SharePreferences存储

    SharePreferences SharePreferences存储 2021-4-5 将数据存储到SharedPreferences中 调用SharedPreferences对象的...TextUtils.isEmpty()可以用来判断两个空值,字符串等于null或者等于空字符串时,这个方法都会返回

    Oracle 10g 开发与管理

    6.JAVA池 不小于20M 20 7.Streams池 20 8.软件代码区: 20 9.程序全局区(PGA) 20 四. 实例的进程结构(实例=SGA + 后台进程) 20 1.DBWR (数据库写入进程) 21 2.LGWR(日志写入进程) 22 3.ARCH(归档进程)-可选...

    Elasticsearch 技术解析与实战.zip

    41 2.2.2 获取映射 44 2.2.3 获取字段映射 45 2.2.4 判断类型是否存在 46 2.3 索引别名 46 2.4 索引配置 51 2.4.1 更新索引配置 51 2.4.2 获取配置 52 2.4.3 索引分析 52 2.4.4 索引模板 54 2.4.5 复制配置 55 2.4.6...

    oracle数据库经典题目

     执行部分:是PL/SQL块的功能实现部分,以关键字BEGIN开始,EXCEPTION或END结束(如果PL/SQL块中没有异常处理部分,则以END结束)。该部分通过变量赋值、流程控制、数据查询、数据操纵、数据定义、事务控制、游标...

    DM8_SQL语言使用手册.pdf

    目录 第 1 章 结构化查询语言 DM_SQL 简介 ....................................................................1 1.1 DM_SQL 语言的特点 .......................................................................

Global site tag (gtag.js) - Google Analytics