您的位置:首页 > 编程语言 > Java开发

java代码问题分析之静态分析工具(Klocwork Insight)

2015-02-05 17:05 330 查看
前言:
软件源代码静态分析工具(Klocwork Insight)分析报告重点内容如下:

1)、Java:相等性比较、哈希代码问题
问题密度:0.93
问题的分布





2)、Java:可维护性问题
问题密度:0.93
问题的分布


方法名称应该非大写字母开头



3)、Java:性能问题
问题密度:1.86
问题的分布


escmp.emptystr:低效的空字符串的比较
strcon.loop:在一个循环中使用附加字符串
umc.tostring:一个字符串的声明调用不必要的tostring()方法



4)、Java:低效的错误处理
问题密度:1.63
问题的分布


exc.broadthrows:方法有一个过于宽泛的声明
ecc.empty:空的catch子句



5)、Java:冗余代码
问题密度:8.31
问题的分布


jd.vnu:变量被分配之后从来没有被使用过
jd.vnu.null:变量在赋值为null后从来没有被使用过
redun.final:多余的final的修饰
jd.rc.expr.check:测试表达式永远是真



1、Comparing strings "" and 'appid' using equals(), instead of length() == 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 ==
详见第1个问题字符串比较描述。

3、Using append for string 'localStepGuid' in a loop
^



复杂字符串拼接处理,应该使用StringBuffer或StringBuilder。
避免在循环体内使用String,频繁创建对象,消耗资源。

String 是字符串类最常用于简单的字符串操作;
StringBuffer 是字符串缓冲。适用于复杂的字符串增删改操作;
StringBuilder 是与 StringBuffer 兼容的 API 简化。 该类被设计用作 StringBuffer 的一个简易替换,用在字符串缓冲区被单个线程使用的时候(这种情况很普遍)。

例如:
StringBuffer localStepGuid = new String Buffer();
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: