【发布时间】:2015-03-11 08:59:29
【问题描述】:
修复声纳违规并收到警告“等于避免空值:
字符串文字表达式应该在等号比较的左侧。" for:
if (title != null && !title.equals("")) {
//rest of loop
}
我改成:
if(!("").equals(title) && title != null){
//rest of loop
}
这样的改变好吗?它会修复违规行为吗?有人可以向我解释为什么原件是违规的吗?我不明白这个问题并已阅读: https://sonar43.spring.io/rules/show/checkstyle:com.puppycrawl.tools.checkstyle.checks.coding.EqualsAvoidNullCheck?layout=false
在其他一两篇文章中,但我仍然不明白问题出在哪里......
【问题讨论】:
-
对不起,我的错误我已经编辑了。这是有道理的,我会在测试中检查 NPE。
-
if (title != null && title.length() > 0)更好,因为它不会为空字符串实例化其他对象。 -
@SashaSalauyou 或
title != null && !title.isEmpty(),假设 Java 1.6+。顺便说一句,像 Klocwork 这样的一些静态分析工具会警告说与空字符串的比较效率不高...... -
@pkalinow
isEmpty()也可以,但是如果你查看源代码,你会发现它也是长度检查。 -
@SashaSalauyou 对,它是一个语法糖:
public boolean isEmpty() { return value.length == 0; }