检查java中导致错误的条件
我有下面的一段代码,在这种情况下,我得到的是声纳 检查是否相等时,应将字符串文本置于左侧。请建议如何克服这一问题检查java中导致错误的条件,java,java-8,sonarqube,Java,Java 8,Sonarqube,我有下面的一段代码,在这种情况下,我得到的是声纳 检查是否相等时,应将字符串文本置于左侧。请建议如何克服这一问题 final String aviid = avcMaster.getAVMaster().getAviiId(); if ((!aviid.equals("44")) || (!aviid.equals("55"))) { // ** Sonar Issue **// final String defaultAiId = "88"; deviceElement.set
final String aviid = avcMaster.getAVMaster().getAviiId();
if ((!aviid.equals("44")) || (!aviid.equals("55"))) { // ** Sonar Issue **//
final String defaultAiId = "88";
deviceElement.setAttribute("avi", defaultAiId);
}
else{
deviceElement.setAttribute("avi", aviid);
}
String
变量和String
文本之间的比较
- 调用变量上的方法:如果变量为null,您将得到一个
NullPointerException
aviid.equals("44")
- 对文本调用方法:如果变量保持
null
"44".equals(aviid)
另外,你的测试是错误的,因为它总是正确的,因为你不能同时得到44和55,其中一个是正确的,你的意思肯定是
&&
,你最好用另一种方法来做,你不需要否定
if ((!aviid.equals("44")) && (!aviid.equals("55"))) {
并缩短时间(从评论中)
如果您的
avid
不为空,则(!avid.equals(“44”))|(!avid.equals(“55”)
始终为真。另外,您要知道:如果(!avid.equals(“44”)|(!avid.equals(“55”))你能举一个例子说明它不会返回真值吗?我想你应该使用&
而不是|
…你可能是指deviceElement.setAttribute(“avi”,avid.matches(“44 | 55”)?avid:“88”)
这是正确的,但是假设在null
的情况下获取false
而不是NullPointerException
更好,这是值得怀疑的。@Holger我没有给出使用的意见:)我知道,Sonarqube确实…
deviceElement.setAttribute("avi", aviid.matches("44|55") ? aviid : "88");