您好,欢迎来到12图资源库!分享精神,快乐你我!我们只是素材的搬运工!!
  • 首 页
  • 当前位置:首页 > 开发 > WEB开发 >
    分享几个任务中适用的代码优化技巧!
    时间:2021-08-08 08:04 来源:网络整理 作者:网络 浏览:收藏 挑错 推荐 打印

    分享几个任务中适用的代码优化技巧!

    前言

    之前分享一篇代码优化的文章:条件语句的多层嵌套成绩优化,助你写出不让同事吐槽的代码!

    明天再次分享一些我日常任务中常用的代码优化技巧,希望对大家有协助!

    注释 类成员与办法的可见性最小化

    举例:假设是一个private的办法,想删除就删除

    假设一个public的service办法,或许一个public的成员变量,删除一下,不得思索很多。

    运用位移操作替代乘除法

    计算机是运用二进制表示的,位移操作会极大地提高功用。

    << 左移相当于乘以 2;>> 右移相当于除以 2;

    >>> 无符号右移相当于除以 2,但它会疏忽符号位,空位都以 0 补齐。

    a = val << 3; 

    b = val >> 1; 

    尽量增加对变量的重复计算

    我们知道对办法的调用是有消耗的,包括创立栈帧、调用办法时保护现场,恢复现场等。

    //反例 

    for (int i = 0; i < list.size(); i++) { 

      System.out.println("result"); 

     

    //正例 

    for (int i = 0, length = list.size(); i < length; i++) { 

      System.out.println("result"); 

    在list.size()很大的时分,就增加了很多的消耗。

    不要捕捉RuntimeException

    RuntimeException 不应该经过 catch 语句去捕捉,而应该运用编码手腕停止规避。

    如下面的代码,list 能够会出现数组越界异常。

    能否越界是可以经过代码提早判别的,而不是等到发作异常时去捕捉。

    提早判别这种方式,代码会更优雅,效率也更高。

    public String test1(List<String> list, int index) { 

        try { 

            return list.get(index); 

        } catch (IndexOutOfBoundsException ex) { 

            return null

        } 

     

    //正例 

    public String test2(List<String> list, int index) { 

        if (index >= list.size() || index < 0) { 

            return null

        } 

        return list.get(index); 

    运用部分变量可避免在堆上分配

    由于堆资源是多线程共享的,是渣滓回收器任务的主要区域,过多的对象会形成 GC 压力,可以经过部分变量的方式,将变量在栈上分配。这种方式变量会随着办法执行的终了而销毁,可以减轻 GC 的压力。

    增加变量的作用范围

    留意变量的作用范围,尽量增加对象的创立。

    如下面的代码,变量 s 每次进入办法都会创立,可以将它移动到 if 语句外部。

    public void test(String str) { 

        final int s = 100; 

        if (!StringUtils.isEmpty(str)) { 

            int result = s * s; 

        } 

    尽量采用懒加载的策略,在需求的时分才创立

    String str = "月伴飞鱼"

    if (name == "群众号") { 

      list.add(str); 

     

    if (name == "群众号") { 

      String str = "月伴飞鱼"

      list.add(str); 

    拜访静态变量直接运用类名

    运用对象拜访静态变量,这种方式多了一步寻址操作,需求先找到变量对应的类,再找到类对应的变量。

    // 反例 

    nt i = objectA.staticMethod(); 

    // 正例 

    nt i = ClassA.staticMethod(); 

    字符串拼接运用StringBuilder

    字符串拼接,运用 StringBuilder 或许 StringBuffer,不要运用 + 号。

    //反例 

    public class StringTest { 

        @Test 

        public void testStringPlus() { 

            String str = "111"

            str += "222"

            str += "333"

            System.out.println(str); 

        } 

          

     

    //正例 

    public class TestMain { 

        public static void main(String[] args) { 

            StringBuilder sb = new StringBuilder("111"); 

            sb.append("222"); 

            sb.append(333); 

            System.out.println(sb.toString()); 

        } 

    重写对象的HashCode,不要复杂地前往固定值

    有同窗在开发重写 HashCode 和 Equals 办法时,会把 HashCode 的值前往固定的 0,而这样做是不恰当的

    (责任编辑:admin)