java质量重构-bug改造(一)

1、应使用“equals()”比较字符串和盒装类型

        比较java.lang.String或盒装类型的两个实例(例如java.lang.Integer使用引用相等性==!=)几乎总是错误的,因为它不是比较实际值,而是比较内存中的位置。

案例:

改造:

!repeat.equals(xmdm)

2、不应取消引用空指针

        null不应该被取消引用/访问。这样做会导致抛出NullPointerException。一般情况下,这样的异常会导致程序突然终止。在最坏的情况下,它可能会暴露对攻击者有用的调试信息,或者它可能允许攻击者绕过安全措施。

案例:

3、不应使用“BigDecimal(double)”

        由于浮点不精确,您不太可能从BigDecimal(double)构造函数中获得您期望的值。相反,您应该使用BigDecimal.valueOf,它使用隐藏的字符串来消除浮点舍入错误,或者使用带String参数的构造函数。

案例:

改造:

BigDecimal.valueOf(0.00)

或:

new BigDecimal(“0.00")

4、资源应该关闭

        实现Closeable接口或其超接口的连接、流、文件和其他类AutoCloseable在使用后需要关闭。此外,该close调用必须在finally块中进行,否则异常可能会阻止调用。最好,当类实现AutoCloseable时,资源应该使用“try-with-resources”模式创建并自动关闭。

        未能正确关闭资源将导致资源泄漏,这可能导致应用程序崩溃。

案例:

 改造:

        添加finally关闭

        或:使用“try-with-resources”模式创建可以自动关闭

5、不应在基于值的类的实例上进行同步

        池化和可能重用的对象不应用于同步锁。如果是,则可能会导致无关线程因无用的堆栈跟踪而死锁。具体来说,String和装箱基本类型(如整数)不应用作锁定对象,因为它们是池化和重用的。

案例:

        

改造: 

        

6、应重构最多包含一次迭代的循环

        最多一次迭代的循环相当于使用一条if语句有条件地执行一段代码。没有开发人员期望找到循环语句的这种用法。如果作者的初衷真的是有条件地执行一段代码,那么if应该使用语句来代替。

案例:

7、不应该进行愚蠢的平等性检查

        不同类型的比较将始终返回 false。可以简单地删除比较及其所有相关代码。这包括:
                1、将对象与 null 进行比较
                2、将一个对象与一个不相关的基元进行比较(例如一个带有 int 的字符串)
                3、比较不相关的类
                4、比较一个不相关的class和interface
                5、比较不相关的interface类型
                6、将数组与非数组进行比较
                7、比较两个数组

案例:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值