前言:



 



  1)、Java:相等性比较、哈希代码问题



 



 


软件源代码静态分析工具(Klocwork <wbr>Insight)分析出Java代码问题的分析



java静态分析工具 java代码静态分析_字符串_02



 


 


  问题的分布


java静态分析工具 java代码静态分析_字符串_03

软件源代码静态分析工具(Klocwork <wbr>Insight)分析出Java代码问题的分析

   

 


 


  问题的分布


java静态分析工具 java代码静态分析_Java_05

软件源代码静态分析工具(Klocwork <wbr>Insight)分析出Java代码问题的分析

  escmp.emptystr:低效的空字符串的比较


  strcon.loop:在一个循环中使用附加字符串


  umc.tostring:一个字符串的声明调用不必要的tostring()方法



 


 


  问题的分布


java静态分析工具 java代码静态分析_字符串_07

软件源代码静态分析工具(Klocwork <wbr>Insight)分析出Java代码问题的分析

  exc.broadthrows:方法有一个过于宽泛的声明


  ecc.empty:空的catch子句



 


 


  问题的分布


java静态分析工具 java代码静态分析_静态分析_09


软件源代码静态分析工具(Klocwork <wbr>Insight)分析出Java代码问题的分析

  jd.vnu:变量被分配之后从来没有被使用过


  jd.vnu.null:变量在赋值为null后从来没有被使用过


  redun.final:多余的final的修饰


  jd.rc.expr.check:测试表达式永远是真




1、Comparing strings "" and 'appid' using equals(), instead oflength() == 0


  前言,首先要说说java空字符串与null,二者区别是" "分配了内存,null没有。 


  ""是一个字符串(String),它在内存中是存在的,它可以使用Object对象中的方法,如"".toString();"".equals()。 


  而null它是一个空对象,在内存中是不存在的,它不可以使用Object对象中的方法。 


  所以比较的时候必须是if(str1==null){....}和if(str2.equals("")){} 


  对象用equals比较,null用等号比较。因此,如果str1=null;下面的写法错误: 


  if(str1.equals("")||str1==null)


 


      //如果str1没有值,则.... //。。。。 


  } 


  正确的写法是 


  if(str1==null||str1.equals(""))


  { 


      //先判断是不是对象,如果是,再判断是不是空字符串//... 


  } 



  问题,对象直接比较,对系统性能将产生较大的影响,特别是做云服务时,更需要注意,推荐用法是判断字符串对象的长度是否为零,例如:


  if(str1==null|| length() == 0)


  { 


      //先判断是不是对象,如果是,再判断是不是空字符串//... 


  } 



2、Comparing strings 'destTag' and '""' with ==


 



3、Using append for string 'localStepGuid' in aloop


java静态分析工具 java代码静态分析_字符串_11


    复杂字符串拼接处理,应该使用 StringBuffer或 StringBuilder。


  避免在循环体内使用String,频繁创建对象,消耗资源。