⭐⭐⭐ Spring Boot 项目实战 ⭐⭐⭐ Spring Cloud 项目实战
《Dubbo 实现原理与源码解析 —— 精品合集》 《Netty 实现原理与源码解析 —— 精品合集》
《Spring 实现原理与源码解析 —— 精品合集》 《MyBatis 实现原理与源码解析 —— 精品合集》
《Spring MVC 实现原理与源码解析 —— 精品合集》 《数据库实体设计合集》
《Spring Boot 实现原理与源码解析 —— 精品合集》 《Java 面试题 + Java 学习指南》

摘要: 原创出处 网络 「网络」欢迎转载,保留摘要,谢谢!


🙂🙂🙂关注微信公众号:【芋道源码】有福利:

  1. RocketMQ / MyCAT / Sharding-JDBC 所有源码分析文章列表
  2. RocketMQ / MyCAT / Sharding-JDBC 中文注释源码 GitHub 地址
  3. 您对于源码的疑问每条留言都将得到认真回复。甚至不知道如何读源码也可以请教噢。
  4. 新的源码解析文章实时收到通知。每周更新一篇左右。
  5. 认真的源码交流微信群。

前几天看到一篇贴子,真的很感同身受——“天才用户取用户名为null,害我熬夜查到两点”……大家有没有遇到过类似的bug?

但如果我们要从一个开发者的角度去看,还真得把那层调侃的外衣扒了,看看里面到底踩的是哪门子坑。

贴子虽然搞笑,背后的技术问题却一点不轻松,甚至可以说是“祖传坑”。

先说明一下,原帖说的“null”到底是啥意思,这不是Java的null关键字,而是一个字符串,也就是"null",用英文引号括起来的那个,是有内容的,不是空。你把这个当成空值处理,那基本就是在写bug。

这个坑最常见的场景,就是你在做用户注册或者处理输入时,没判断输入的值是不是故意输入的"null",系统就把它当成了一个“真空值”处理,结果各种异常报错就来了。有一次我在写一个后端注册接口,前端传了一个json:

{
"username": "null",
"password": "123456"
}

我当时后台代码是这样的:

if (user.getUsername() == null) {
thrownew IllegalArgumentException("用户名不能为空");
}

你猜怎么着?这段代码压根都没报错,因为"null"这个字符串根本不是null,它是有内容的字符串,结果这个用户就“合法”注册进系统里了。

等到要发邮件、要加权限,甚至检查重名时,才发现怎么一个用户叫null,简直像个幽灵。

文章目录