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() 就出現了空指針異常

相關文章
相關標籤/搜索