前几天看到一篇贴子,真的很感同身受——“天才用户取用户名为null,害我熬夜查到两点”……这谁没遇到过类似的bug?
但如果我们要从一个开发者的角度去看,还真得把那层调侃的外衣扒了,看看里面到底踩的是哪门子坑。贴子虽然搞笑,背后的技术问题却一点不轻松,甚至可以说是“祖传坑”。
先说明一下,原帖说的“null”到底是啥意思,这不是Java的null
关键字,而是一个字符串,也就是"null"
,用英文引号括起来的那个,是有内容的,不是空。你把这个当成空值处理,那基本就是在写bug。
这个坑最常见的场景,就是你在做用户注册或者处理输入时,没判断输入的值是不是故意输入的"null"
,系统就把它当成了一个“真空值”处理,结果各种异常报错就来了。有一次我在写一个后端注册接口,前端传了一个json:
{
"username": "null",
"password": "123456"
}
我当时后台代码是这样的:
if (user.getUsername() == null) {
thrownew IllegalArgumentException("用户名不能为空");
}
你猜怎么着?这段代码屁都没报错,因为"null"
这个字符串根本不是null,它是有内容的字符串,结果这个用户就“合法”注册进系统里了。等到要发邮件、要加权限,甚至检查重名时,才发现怎么一个用户叫null,简直像个幽灵。