SimpleDateFormat

SimpleDateFormat是一个性能十分低下的工具类,滥用SimpleDateFormat十分容易导致性能问题
错误的示范:

错误的解决办法

如果将SimpleDateFormat写成static的,就可以避免重复创建,但是SimpleDateFormat又是线程不安全的,如果将其设成synchronized,性能又变差了

优雅的解决办法

比较优雅的做法是用ThreadLocal

网上的例子大多只支持一种格式

支持任意种格式的DateUtil

我稍加修改,现在多了一个format参数,具体代码

很久很久以前

刚从业时,是做Java后端的
我们知道Integer是int的包装类,2个int类型的值是可以通过a == b来进行比较的
于是想当然以为Integer也是可以这么比较

一次事故就要开始

一个简单的充值验证,需要比较充值数额是否相等,用的Integer类
我们测试的时候用的是1块钱(10金币),比较金币拿了2个Integer来做==判断
10金币顺利通过测试,100金币也是,随之上线

事故的爆发

产品上线后,从后台查询发现,只有10金币和100金币的充值记录(但按经验看来是不合理的)
也有玩家陆续反应100块(1000金币)充值失败

原因

Java中<128的Integer取的是常量,内存地址是一样的,>=128时,则是重新开辟了一块内存
又因为==是比较内存地址用的,比较值相等应该用a.equals(b)

测试代码

输出