Day11 JAVA 坑

Day11 JAVA 避坑指南

摘要

本文关于 JAVA 中出现的坑进行说明。

浮点数处理

背景

数的表示范围是有限的。整型可以精确的表示一个数据,浮点数近似表示一个数据???

单精度的数据存储格式

使用浮点数可能导致的结果:精度丢失。

单精度数据的存储格式是以 有效数字 + 指数 的方法存储的。

浮点数避坑方法

  1. 浮点数之间的等值判断,基本数据类型不能用 == 来比较。包装数据类型不能用 equals 来判断。

  2. BigDecimal 的等值比较应使用 compareTo() 方法,而不是 equals() 方法

  3. equals() 方法会比较值和精度

  4. compareTo() 会忽略精度

  5. 禁止使用构造方法 BigDecimal(double) 的方式把 double 值转化为 BigDecimal 对象

日期处理

传统日期的缺点

  1. 所有日期都是线程不安全的

  2. 日期、时间、时间戳没有明确对应的类

  3. 对于格式化和解析的需求无法满足

日期处理闭坑

书写格式

  1. 传入 pattern 中表示年份同意使用小写的 y

  2. 日期中分清M和m,H和h

  3. 获取当前毫秒数时,使用:System.currentTimeMillis()

处理方法

在工具类中写统一的 pattern。不需要再次定义。

控制语句处理

switch 控制语句

  1. 每个case通过 continue/break/return 来终结

  2. 要注释说明程序将继续执行到哪一个case为止

  3. 在一个 switch 内,都必须包含一个default语句并且放在最后

  1. 在表达异常的分支时,少用 if-else 语句

三目运算符

三目运算符高度注意类型对齐时,可能抛出因自动拆箱导致的NPE异常

condition?表达式1:表达式2

以下两种场景会触发类型对齐的拆箱操作:

  1. 表达式1或表达式2的值只有一个是原始类型

  2. 表达式1或表达式2的值类型不一致,会强制拆箱升级成表示范围更大的那个类型

高并发中的控制语句

在高并发场景中,避免使用“等于”判断作为终端或退出的条件。如果并发控制没有处理好,容易产生等值判断被击穿的情况。使用大于或小于的区间判断条件来代替等于。

OOP 设计

  1. 所有覆写的方法,必须加@Override注解

  2. 可变参数避免使用 Object

  3. 可变参数必须放在参数列表最后

  4. 尽量不用可变参数

  5. 所有整型包装类对象之间值的比较,全部使用 equals 方法

  6. 应使用常量或确定有值的对象调用 equals

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值