关于程序null值的见解
今天遇到了一个问题,查询一条数据,返回用list接,发现少了2个值(ssh框架)。执行SQL少的这两个字段的值为null。上图说明一下:
可以看到第一次查询没有角标38、39的值。
是同一条SQL,第一张图数据库执行SQL,
查询到这两个字段值为null,用list接回来后没有角标38、39,如图所示。
原因还没有去代码测试,网上查询说list可以接null。
要说的不是这个问题,而是对于null值的一些个人粗浅见解。
首先个人觉得对于一个程序员来说,在写代码的时候需要注意的一点就是空值判断。
因为我们写的程序是处理数据的,如果没有数据不仅写的代码没有存在的意义,
而且会报空指针的运行异常。程序之所以运行是建立在有数据的基础之上的。
所以良好的代码应该首先考虑空值的问题。这点在很多经典的代码中都可以看到。
上图为spring框架的源码,就做了非空判断。
不仅如此,在Java语言中基本数据类型都接受null值而不会报错。
这是为什么呢?
1.String 对象:直接判断是否为 null,如果为 null 给 null 对象赋值为”null”。
2.非 String 对象:通过调用String.valueOf方法,如果是 null 对象,就返回”null”,否则调用对象的toString方法。
通过上面的处理,可以保证打印 null 对象不会出错。
原来Java语言在对于null值的处理上采用这样的方式解决的。从而保证了不会报错。
但是我们借助Java语言写代码的时候自己构造的一些对象是否为null只能自己去做非空限制。而且是必须要做的,
它能保证你的程序运行良好而不会因为空值报这种低级错误。
null不是任何一种数据类型,与其说它是一种特殊的值,不如说它是一种特殊情况下(数据为空)的处理策略。
讲的不够详细,也是理解还不够全面深入,null不止上面说的几点中会遇到,很多地方都有,
例如mybatis动态sql中where条件的拼接就要先判断是否为 "" | null。
想说两点:
1.良好的代码从预防null做起。如果写代码提前考虑到null的情况,能避免产生很多不必要的bug。
2.做到这一步是走向编程高手的第一步。个人感觉写代码也是有层次划分的。
起步是先从预防null做起,逐步考虑到的方面会越来越多,如高复用(重构)、高性能等,
代码水平和质量会越来越高,而且也能越来越考虑的视野扩大、层次提高,离架构师越来越近。
这是本人的第一篇博客,感谢进来看的老铁,
希望我们能一起努力、共同进步,同时也希望能多向你们学习、请教。
最新文章
- web api9
- C++11智能指针读书笔记;
- Jenkins邮件扩展插件【Email Extension Plugin】的参数使用
- datatables设置解析
- Cracking Story - How I Cracked Over 122 Million SHA1 and MD5 Hashed Passwords
- 每日Scrum--No.6
- ERROR 1044 (42000): Access denied for user 'root'@'localhost' to database 'mysql'
- NYOJ 士兵杀敌(三)
- ionic 实现双击返回键退出应用功能
- Hadoop集群(第3期)_VSFTP安装配置
- Windows下安装GTK+
- matlab中图像处理常见用法
- Selenium WebDriver + Grid2 + RSpec之旅(二)----Grid2的配置
- 测试sql性能方法
- .NET(WinCE、WM)转Android开发——Xamarin和Smobiler对比
- 【XSY3309】Dreamweaver 高斯消元 拉格朗日插值
- (void) (&;_x == &;_y)的作用
- Java 始终要覆盖toString
- abap异常处理 , update module
- C++中的class (1)
热门文章
- Spring中AOP相关源码解析
- Python笔记【7】_反射getattr&;hasattr&;setattr&;delattr
- 使用vue-print-nb插件页面空白以及打印没有样式问题
- Android使用Camera2获取预览数据
- Codeforces 782B:The Meeting Place Cannot Be Changed(三分搜索)
- Spring Boot + Elasticsearch实现大批量数据集下中文的精确匹配-案例剖析
- 微信小程序 键盘显示短信验证码
- MyBatis简单使用方式总结
- 【分治】黑白棋子的移动-C++
- [记录] Linux登录前后提示语