改善Java程序的151个建议总结(二)

不积跬步,无以至千里;

不积小流,无以成江海。

                                                                                                                                                    ——荀子《劝学篇》


用偶判断,不用奇判断。(i%2 == 0 ? “偶数” : “奇数” )

对于基础知识,我们应该“知其然,并知其所以然”。

在计算机中浮点数有可能是不准确的,它只能无限接近准确值,而不能完全精确。在十进制的世界里没有办法准确表示1/3,而在二进制世界里当然也无法准确表示1/5,在二进制的世界里1/5是一个无限循环小数。

要解决精度问题,有两种办法:

1、使用BigDecimal

BigDecimal是专门为弥补浮点数无法精确计算的遗憾而设计的类,并且本身提供了加减乘除常用数学算法。可以和数据库Decimal类型的字段映射时,是最优选择。

2、使用整型

把参与运算的值扩大100倍,并转变为整型,然后在展示时再缩小100倍。

Java是先运算然后再进行类型转换。过了界就会从头开始。

基本类型转换时,使用主动声明方式减少不必要的Bug。如:long dis = 1L * 60 * 8;

数字越界使检验条件失效。

BigDecimal和RoundingMode是一个绝配,目前Java支持七种舍入方式:

1、ROUND_UP:远离零方向舍入

2、ROUND_DOWN:趋向零方向舍入

3、ROUND_CEILING:向正无穷方向舍入 Math.round方法使用的即为此模式

4、ROUND_FLOOR:向负无穷方向舍入

5、HALF_UP:最近数字舍入(5进)

6、HALF_DAWN:最近数字舍入(5舍)

7、HALF_EVEN:银行家算法:四舍六入五考虑,五后非零就进一,五后为零看奇偶,五前为偶应舍去,五前为奇要进一。

根据不同的场景,慎重选择不同的舍入模式,以提高项目的精准度,减少算法损失。

包装对象和拆箱对象可以自由转换,但是要剔除null值,null值并不能转化为基本类型。包装类型参与运算时,要做null值校验。

在Java中“==”是用来判断两个操作数是否有相等关系的,如果是基本类型则判断值是否相等,如果是对象则判断是否是一个对象的两个引用,也就是地址是否相等。

在Java中,“>”和“<”用来判断两个数字类型的大小关系,注意只能是数字型的判断,对于Integer包装类型,是根据其intValue()方法的返回值进行比较的。

通过valueOf产生的包装对象时,如果int参数在-128到127之间,则直接从整型池中获得对象,不在该范围的int类型则通过new生成包装对象。

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

自动拆箱(装箱)只有在赋值时才会发生,和重载没有关系。

自动装箱有一个重要的原则:基本类型可以先加宽,再转变成宽类型的包装类型,但不能直接转变成宽类型的包装类型。简单地说就是,int可以加宽转变成long,然后再转变成Long对象,但不能直接转变成包装类型,这里指的都是自动转换。

重申,基本类型优先考虑。

在Java中,随机数的产生取决于种子,随机数和种子之间的关系遵从以下两个规则:

1、种子不同,产生不同的随机数。

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值