惊天发现 空串.equals(str)的坏处

zzt369880281 2012-12-08 09:24:21
有人说,要检测一个字符串是否是空
!str.equals("")
大家都知道,这样容易空指针,所以必须先验空
str != null && !str.equals("")
这样当然是比较安全的,但是有人想了更方便的方法
!"".equals(str)
我也经常用这种方式,但是,有没有发现,如果str为null时,表达式的值成了true了,与我们的逻辑相反了.
...全文
705 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
yongger520 2012-12-13
  • 打赏
  • 举报
回复
引用 22 楼 she383 的回复:
估计是楼主记错了
实践证明 !"".equals(str) 是个错误的东西 lz关了帖子吧 我们都不这么用的 要么lz记错了,要么视频讲师搞错了
akemi_homura 2012-12-13
  • 打赏
  • 举报
回复
引用 10 楼 keeya0416 的回复:
6、7楼被弄晕了吧 楼主的意思是 str != null && !str.equals("") 这样当str 非null且非空的时候楼主打算做些操作 而 !"".equals(str) 当str==null的时候,楼主本不想做操作的,结果也让操作了
爬完楼我要顶一下10楼。大家的看法感觉都好片面。都自以为理所当然的自己是正确的了。
she383 2012-12-12
  • 打赏
  • 举报
回复
估计是楼主记错了
为啥呢 2012-12-12
  • 打赏
  • 举报
回复
引用 20 楼 zzt369880281 的回复:
我是这个意思: 以前:{ 我以为 str != null && !str.equals("") 和 !"".equals(str) 是相同的功能 } 后来{ 我发现它们不是相同的功能 } 发帖前{ 我以为大家都在用 !"".equals(str) } 看了大家的……
我认为你应该再看一遍那个视频,如果那个视频真有很出名,那纠错就是十分必要的,你应该指正这个错误以免他再误人子弟。
zzt369880281 2012-12-12
  • 打赏
  • 举报
回复
我是这个意思: 以前:{ 我以为 str != null && !str.equals("") 和 !"".equals(str) 是相同的功能 } 后来{ 我发现它们不是相同的功能 } 发帖前{ 我以为大家都在用 !"".equals(str) } 看了大家的回复后{ 我发现,没人像我这样用 } 由来{ 我在一个比较出名的视频上学的,视频上说, !"".equals(str)比较方便,而且完成了与 str != null && !str.equals("")相同的功能 }
sjlzcj 2012-12-10
  • 打赏
  • 举报
回复
楼主 看看 apache 的StringUtil
kutuzov2016 2012-12-10
  • 打赏
  • 举报
回复
String s = null; System.out.println("".equals(s)); 这个会输出true ????? 不会吧
yongger520 2012-12-10
  • 打赏
  • 举报
回复
lz 别整什么惊天动地的发现 多学习下java基础 自己是新手 还充冤大头!
wo890532 2012-12-10
  • 打赏
  • 举报
回复
null和""原本就是两个概念,还惊天发现,字符串String str=null;是没给内存占用空间,而String str="";是给内存开辟一个空间,看你自己根据情况用,!"".equals(str)根本没有和自己的逻辑相反,所以我们编码最好有赋初始值的习惯。
  • 打赏
  • 举报
回复
引用 15 楼 yongger520 的回复:
lz 别整什么惊天动地的发现 多学习下java基础 自己是新手 还充冤大头!
i++
司机 2012-12-09
  • 打赏
  • 举报
回复
都是用null != s && s.isEmpty()
幽饮烛 2012-12-09
  • 打赏
  • 举报
回复
这是一个编程规范的问题。针对这个问题,有工具类处理,比如 Apache 的 StringUtils 类的 isEmpty 方法。
猿来是妳 2012-12-09
  • 打赏
  • 举报
回复
!"".equals(str) 有点意思。 可是拿!""和一个null做比较有意义吗?而反过来是不是就不一样了! 逻辑上理不通的话,我觉得还是按照之前str != null && !str.equals("")这种方式可读性要好,而且 安全性能上也不会有什么问题。
keeya0416 2012-12-09
  • 打赏
  • 举报
回复
6、7楼被弄晕了吧 楼主的意思是 str != null && !str.equals("") 这样当str 非null且非空的时候楼主打算做些操作 而 !"".equals(str) 当str==null的时候,楼主本不想做操作的,结果也让操作了
地球原住民 2012-12-08
  • 打赏
  • 举报
回复
lz 的意思可能是说这种用法看起来没问题,但是实际上很有问题,惊叹一下而已~
引用 4 楼 Inhibitory 的回复:
!"".equals(str) 我也经常用这种方式,但是,有没有发现,如果str为null时,表达式的值成了true了,与我们的逻辑相反了. 这个不是true难道是false不成?别忘了前面有个 !
xingfuzhuzi1314 2012-12-08
  • 打赏
  • 举报
回复
str != null && !str.equals("") 现在一般都是这种方式吧! null和“”都判断下!
Inhibitory 2012-12-08
  • 打赏
  • 举报
回复
!"".equals(str) 我也经常用这种方式,但是,有没有发现,如果str为null时,表达式的值成了true了,与我们的逻辑相反了. 这个不是true难道是false不成?别忘了前面有个 !
  • 打赏
  • 举报
回复
null和""是两个概念
傲雪kimi 2012-12-08
  • 打赏
  • 举报
回复
是啊,"".equals(null) 值是false,那要考虑null 的情况还是用第一种做判断的形式了。
huntor 2012-12-08
  • 打赏
  • 举报
回复
如果非要先判断非null:

s != null && s.isEmpty()
加载更多回复(2)

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧