引言:爲了更好的使項目代碼規範化,減小Bug的出現,所以最近引入了SonarQube來幫助檢測代碼問題,這裏就分享部分有趣的規則。app
注:由於保密原則,文章貼出來的代碼都是我按照格式仿寫的,並不是公司源碼。oop
解釋:已裝箱的值被解除裝箱,而後當即從新裝箱。 性能
示例: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();
解釋:在循環的每次迭代中,字符串被轉換爲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();
解釋:可能出現空指針異常
示例:
if (null != user || name.equals(user.getName())){ ......... }
這個邏輯判斷就有明顯問題,當 | | 前面爲false也就是 user == null 時,會繼續進行判斷,
因而在後面 user.getName() 就出現了空指針異常