• 《改善java代码》第二章:java有关基本类型的代码优化


    1. 判断变量为偶数还是奇数,要用偶数判断,而不是奇数判断,如:if(inputNum % 2 == 1) 判断是否为奇数,则如果inputNum为-1是,通过(inputNum % 2 == 1) 则被判为偶数,原因是java求余的方法为:divident - divident / divisor * divisor;  如果inputNum为-1时,则返回的结果仍为-1;因此需要改成if(inputNum % 2 == 2) 判断是否为偶数
    2. System.out.println(10.00-9.60);输出结果为:0.40000000000000036  原因是,十进制小数转为二进制时无限循环。解决方式:方法1用bigdecimal,方法2使用整型,
      即参与运算的值扩大100倍转为整型,计算后再缩小100倍。
              BigDecimal aa = new BigDecimal(-1.66728D);
              System.out.println(aa.setScale(2, BigDecimal.ROUND_UP));
              System.out.println(aa.setScale(2, BigDecimal.ROUND_DOWN));    
    3. 计算list的元素之和,要谨防null元素,null不能转换为基本数据类型。因此包装类型参与运算时,要做null值校验。
    4. 装箱时需要注意:
      int ii=128;
      i = Integer.valueOf(ii);
      j = Integer.valueOf(ii);
      System.out.println(i==j);     //如果ii为-128至127,则自动装箱时,直接从整型池获取的包装对象,而不在这个范围之内,则新建一个对
      //象,地址不同也就不同了。
      注意:装箱代码
      public static Integer valueOf(int i) {
      assert IntegerCache.high >= 127;
      if (i >= IntegerCache.low && i <= IntegerCache.high)
      return IntegerCache.cache[i + (-IntegerCache.low)];
      return new Integer(i);
      }

      另外,装箱时有一个重要的原则:基本类型可以先加宽,再转变成宽类型的包装类型,但不能直接转变成宽类型的包装类型。

  • 相关阅读:
    2016/1/18
    正则知识点总结
    爬虫反反爬虫:转
    健身与饮食随想--年轻的每一天,都是弥足珍贵的!!!
    python time模块
    c语言求两个数的最大公因数(穷举法,欧几里得算法,递归)
    c语言递归解决汉诺塔问题
    python用函数打印素数(代码未优化)
    羊车门问题提交
    Delphi Tokyo 10.2.3
  • 原文地址:https://www.cnblogs.com/yaohuiqin/p/9287900.html
Copyright © 2020-2023  润新知