null或空值的判断处理

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!"

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏电光石火

null或空值的判断处理

1,错误用法一: if (name == "") {      //do something } 2,错误用法二: if (name.equal...

2089
来自专栏编程心路

Java虚拟机内存管理(二)—堆的使用

Java 虚拟机作为运行 Java 程序抽象出来的计算机,具有内存管理的能力,像内存分配、垃圾回收等这些相关的内存管理问题,Java 虚拟机都会帮我们解决,所以...

1192
来自专栏高性能服务器开发

Redis应用总结

首先, 我带大家简单的了解一下Redis Redis常用数据类型(最为常用的数据类型主要有以下五种) ●String ●Hash ●List ●Set ●Sor...

3207
来自专栏Java编程技术

并发队列-无界非阻塞队列ConcurrentLinkedQueue原理探究

常用的并发队列有阻塞队列和非阻塞队列,前者使用锁实现,后者则使用CAS非阻塞算法实现,使用非阻塞队列一般性能比较好,下面就看看常用的非阻塞ConcurrentL...

1111
来自专栏Java职业技术分享

Java技术——你真的了解String类的intern()方法吗

是不是感觉莫名其妙,新定义的str2好像和str1没有半毛钱的关系,怎么会影响到有关str1的输出结果呢?其实这都是intern()方法搞的鬼!看完这篇文章,你...

1430
来自专栏coding for love

JS入门难点解析8-作用域,作用域链,执行上下文,执行上下文栈等分析

(注1:如果有问题欢迎留言探讨,一起学习!转载请注明出处,喜欢可以点个赞哦!) (注2:更多内容请查看我的目录。)

881
来自专栏Redis源码学习系列

Redis源码学习之对象系统

在前面的文章中,我介绍了Redis的底层数据结构,但Redis对外提供的命令并没有直接使用它们,而是基于它们构建更高级的数据对象,总共包括5中对象类型,分别为【...

1313
来自专栏思考的代码世界

Python基础学习06天

1474
来自专栏用户画像

浅析JAVA堆内存和栈内存的区别

堆内存:https://baike.baidu.com/item/%E5%A0%86%E5%86%85%E5%AD%98/7270805?fr=aladdin

1211
来自专栏GreenLeaves

C# 特性(Attribute)之Serializable特性

本文参考自Serializable 作用,纯属读书笔记,加深记忆 介绍之前,先说一个重要的知识点: Serializable属性并不序列化类,它只是一个标签。至...

30110

扫码关注云+社区