博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
编写高质量代码:改善Java的151个建议四(基本类型)21-30
阅读量:5317 次
发布时间:2019-06-14

本文共 2596 字,大约阅读时间需要 8 分钟。

该书籍PDF下载地址:

基本类型有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

你可能感兴趣的文章
AndroidArchitecture
查看>>
原生JavaScript第六篇
查看>>
安装Endnote X6,但Word插件显示的总是Endnote Web"解决办法
查看>>
python全栈 计算机硬件管理 —— 硬件
查看>>
大数据学习
查看>>
简单工厂模式
查看>>
Delphi7编译的程序自动中Win32.Induc.a病毒的解决办法
查看>>
Objective-C 【关于导入类(@class 和 #import的区别)】
查看>>
倍福TwinCAT(贝福Beckhoff)常见问题(FAQ)-点击运行按钮进入到运行状态报错Error starting TwinCAT System怎么办 AdsWarning1823怎么办...
查看>>
【转】javascript 中的很多有用的东西
查看>>
Centos7.2正常启动关闭CDH5.16.1
查看>>
Android 监听返回键、HOME键
查看>>
Android ContentProvider的实现
查看>>
sqlserver 各种判断是否存在(表名、函数、存储过程等)
查看>>
给C#学习者的建议 - CLR Via C# 读后感
查看>>
Recover Binary Search Tree
查看>>
Java 实践:生产者与消费者
查看>>
[转]IOCP--Socket IO模型终结篇
查看>>
(五)归一化
查看>>
使用信号量
查看>>