SonarQube的部分规则探讨

引言:为了更好的使项目代码规范化,减小Bug的出现,所以最近引入了SonarQube来帮助检测代码问题,这里就分享部分有趣的规则。app

注:由于保密原则,文章贴出来的代码都是我按照格式仿写的,并不是公司源码。oop

 

一. Boxed value is unboxed and then immediately reboxed

解释:已装箱的值被解除装箱,而后当即从新装箱。 性能

示例:ui

User user = new User();
Long userId = (user.getId() == null)? 0 : user.getId();

这里是拆装箱问题,int类型的值0,被拆了箱又再装箱,因此spa

改进:3d

User user = new User();
Long userId = (user.getId() == null) ? Long.valueOf(0) : user.getId();

 

二. Method concatenates strings using + in a loop

解释:在循环的每次迭代中,字符串被转换为StringBuffer/StringBuilder,附加到字符串,而后再转换回字符串,指针

  这可能致使迭代次数的二次成本,由于不断增加的字符串在每次迭代中重复出现。代码规范

  建议使用StringBuffer提升性能,后面是案例。code

示例:blog

List<User> users = new ArrayList<>();
users.add(user1);
users.add(user2);
        
String str = "";
for (User user : users) {
       str += user.getName() + ".";
}

这并不算是Bug,由于更多的是建议,条件容许的话能够采起。

改进:

List<User> users = new ArrayList<>(); users.add(user1); users.add(user2);
StringBuffer strBuf = new StringBuffer();
 for (User user : users) {
        strBuf.append(user);
}
String str = strBuf.toString();

 

三. Null pointer dereference

 

解释:可能出现空指针异常

示例:

if (null != user || name.equals(user.getName())){
         .........
}

这个逻辑判断就有明显问题,当 | | 前面为false也就是 user == null 时,会继续进行判断,

  因而在后面 user.getName() 就出现了空指针异常

相关文章
相关标签/搜索