编写高质量代码:改善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

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

  

原文地址:https://www.cnblogs.com/-scl/p/7641562.html