前言
过年了,年终也领完了,这不打算出去面试一波,看看自己在市场中的价值,于是我简单的做了波简历,然后去面试一波,结果谁知,第一个面试就差点碰壁了,面试官竟然问我BigDecimal这个类,可是我不慌,心中有料,内心不慌,于是轻松拿下了一波高薪offer
BigDecimal,这个类其实对于经常接触金融、电商、支付的猿猿来说不算陌生,我也还算是熟悉,我也经常用,但是很多时候我们只知道他的用法,并不知道他还有隐藏的细节
首先,这是java.math包中提供的一种可以用来进行更高精度运算的类型,相较于double、float这些类型来说,BigDecimal在和金额计算打交道应该说有着天然的优势,这个大家也很熟悉了,接下来我们一起来分析下BigDecimal中的哪些注意事项
1、BigDecimal不能使用equals方法做等值比较\
2、BigDecimal使用double初始化时存在精度风险\
\
问题一
这个问题其实真的是很细节了,不知道大家有没有注意到,在《阿里巴巴Java开发手册》中其实也有注明
不知道你们在比较BigDecimal的时候都是怎么使用的,但是千万不要用这种方式来使用哦,这个应该不用多说吧,BigDecimal属于对象,不是基本类型,不能用来比较
一般说到这里,大家就知道了,对象的话肯定使用equals来进行比较咯,这样就没问题了,告诉你,用equals比较也有问题
你个渣,我怀疑你在骗我,那你告诉我为何,还有怎么解决?
那我该如何比较呢,自定义个类,继承BigDecimal,重写equals,当然可以。但是其实有更好的办法,在BigDecimal内部提供了compareTo方法买这个方法可以直接判断两个数字的值,相等则返回0
知其然,也要知其所以然,我肯定会解释清楚的嘞
我们来看个例子:
BigDecimal bigDecimal1 = new BigDecimal(1);
BigDecimal bigDecimal2 = new BigDecimal(1); System.out.println(bigDecimal1.equals(bigDecimal2));
BigDecimal bigDecimal3 = new BigDecimal(1);
BigDecimal bigDecimal4 = new Big