栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java语言你知道或不知道的坑

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java语言你知道或不知道的坑

前言

不管是再好的编程语言,如果使用不当,总能出问题。就好像,车再好也架不住司机师傅糟糕的技术啊。

浮点数

继上一篇对浮点数的题目引发的思考,相信对浮点数潜在的取近似值导致的精度丢失问题都有所认识。那么,我们应该如何应对?

  1. 尽量不使用浮点数。
    例如,需要保存币种时,总是以最小单位存储。像人民币,那就以分为单位存储。
  2. 在需要使用浮点数时,推荐使用BigDecimal

    a. 不要使用BigDecimal(double)构造器,同样会存在近似值问题。推荐使用BigDecimal(String)
    b. BigDecimal在比较时,equals和compareTo是有区别的
    equals方法除了比较值,还会比较精度。因此即使值相等,精度不相等也是false
    而compareTo则只比较值大小。

时间格式处理 推荐使用新的时间API。
1. 传统API非常不便利,例如Date进行运算比较麻烦。
	- 例如:在计算两个日期的时间间隔,没有直接的API。手动进行运算有两种方式:
	要么通过获取两个日期的毫秒相减再除以每天的毫秒数,这种只能精确到天。
	要么通过转换成Calendar然后用add方法来精确计算
	还有一种是,各种山寨的人工统一按照30天/365天计算月/年。
	与之对应的是,JDK8提供了新的Duration和Period可以很方便的计算。
2. 传统API的格式化线程不安全,推荐使用新API的DateTimeFormat
日期格式的坑

日期格式中,
M表示月份,而m表示的是分钟
H表示的是24小时制,h表示的是12小时。

统一定义日期格式

避免系统中出现时间格式不统一。

public static final String[] DATA_TIME_PATTERNS = new String[] {
	"yyyy-MM-dd HH:mm:ss.SSS",
	"yyyy-MM-dd HH:mm:ss",
	"yyyy-MM-dd HH:mm",
	"yyyy-MM-dd"
}
控制语句 Switch
  1. 对null进行switch,可是会NPE的!!!因此需要先判空。
    原因是,对于封装类型或者String,要么自动拆箱,要么获取hashCode进行比较。而这两者都是直接调用的对象的方法。
  2. switch中必须有且只有一个default,并且必须放在最后。
    原因是,如果没有default,那么异常情况就没得处理了。而如果不是在最后,要是没有break,真不知道执行到哪里才会停止!
  3. 每个case都必须用break/return/continue等来终止,如果没有则必须注明在哪里终止。
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/462688.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号