zoukankan      html  css  js  c++  java
  • 编写高质量代码:改善Java的151个建议四(基本类型)21-30

    该书籍PDF下载地址:http://download.csdn.net/download/muyeju/10001473

    基本类型有8个:byte,short,int,char,long,double,float,boolean

    21.用偶判断,不用奇判断

     当判断一个数是偶数还是奇数的时候,应该判断是否是偶数。

     i%2==0?"偶数":"奇数"

     取余的原理:

     被除数-被除数/除数*除数

    22.货币的值

      货币的值一般都是2为小数,如果用浮点类型的话,计算机计算出来的结果可能是不准确的,它只能无限接近某个值,而不能完全精确,这是由浮点数的存储规则决定的。就像十进制里面三分之一不能准确表示,二进制里面五分之一也不能准确表示。

      例:10-9.6=0.40000000000000036

     解决方法:

     1.使用BigDecimal处理

     2.使用整形,只要展示时缩小100倍就可以了,及是以分为单位

    23.基本类型转换时,使用主动声明方式减少不必要的Bug

      Java是先运算,然后进行类型转换。超过了int的最大值时,其值就是负,因为过界了就会从头开始

    24.基本类型的边界

        对基本类型进行判断的时候,应该注意其边界值,一旦超过边界值,就会使校验条件失效。所以应避免输入或传入的值就行计算,直接用输入或传入的值进行判断

     例如:

    package deep;
    
    import java.util.Scanner;
    
    public class Client {
        // 一个会员拥有产品的最多数量
        public static final int LIMIT = 2000;
    
        public static void main(String[] args) {
            // 会员当前拥有的产品数量
            int cur = 1000;
            Scanner input = new Scanner(System.in);
            System.out.println("请输入需要预定的数量:");
            while (input.hasNextInt()) {
                int order = input.nextInt();
                // 当前拥有的与准备订购的产品数量之和
                if (order > 0 && order + cur <= LIMIT) {
                    System.out.println("你已成功预定了" + order + "个产品!");
                } else {
                    System.out.println("超过限额,预订失败!");
                }
            }
        }
    }

    当输入的值是2147483647 这个的时候,会发现也预定成功,这个因为数字越界,使检验条件失效

    修改:(order > 0 && order <= LIMIT - cur)成这样就行了,应该避免输入(传入)的参数进行计算

    25.根据不同的场景,选择不同的舍入模式

       RoundingMode的几种舍入模式:

           1.RoundingMode.CEILING:向正无穷方向舍入

        2.RoundingMode.FLOOR:像负无穷方向舍入

        3.RoundingMode.UP:像绝对值最大的方向舍入,舍弃非零即进位

        4.RoundingMode.DOWN:像绝对值最小的方向舍入,所有位都舍弃,不存在进位的情况

        5.RoundingMode.HALF_UP:最近数字舍入(5舍)

        6.RoundingMode.HALF_DOWN:最近数字舍入(5舍)

        7.RoundingMode.HALF_EVEN:银行家算法(4舍6入5考虑,5后非0就进1,5后为0看奇偶,5前为偶应舍去,5前为奇要进一)

    26.包装类型参与计算时,要做null值校验

      例:

      

    27.包装类型的大小比较

      包装类的比较不能用==,因为包装类是对象,用==比较的是对象的引用,即地址是否相等。(如果是基本类型,==比较的是它们的值是否相等)

      用compareTo()方法比较,相等返回0,大于返回1,小于返回-1

      例:

      

    public static void main(String[] args) {
            Integer i = new Integer(300) ;
            Integer j = new Integer(-600) ;
            int k = j.compareTo(i) ;
            System.out.println(k);
            //结果:-1
        }

    28.优先使用整型池

      整型池:在IntegerCache类中,存在一个cache静态数组,容纳的是-127到128之间的Integer对象。通过valueOf产生包装对象时,如果int在-128到127之间,则之间从整型池中获得对象,不在该范围类的int类型则通过new生成包装对象。

      整型池的存在提高了系统性能,节约了内存空间

      通过包装类的valueOf生成包装实例显著提高空间和时间性能

    29.基本类型优先使用

      因为有包装类时,可能会进行一些拆箱装箱的过程,从而导致出现一些想不到的问题

    30.不要随便设置随机种子

      随机数和种子之间的关系:

        种子不同,产生不同的随机数

        种子相同,即使实例不同,也产生相同的随机数

        例:

    public static void main(String[] args) {
        Random r = new Random(1000) ;
        for(int i=1;i<4;i++){
            System.out.println("--------"+r.nextInt());
        }
    }

      结果始终是:

    ---------1244746321
    --------1060493871
    ---------1826063944

    所以,若非必要,不要设置随机数种子

      

  • 相关阅读:
    QString 与 string转换
    Lua 判断表是否为空方法
    QT 继承QWidget && 继承QDialog
    QNetworkAccessManager
    Lua语言特色
    Lua逻辑操作符
    Lua语言总结
    Lua 函数
    Lua数据类型
    QT 通过QNetworkReply *获取对应请求的URL地址
  • 原文地址:https://www.cnblogs.com/-scl/p/7641562.html
Copyright © 2011-2022 走看看