浮点数运算问题
当浮点数进行四则运算时会出现精度缺失问题,所以当涉及浮点数计算时都会使用BigDecimal工具类进行计算,提供一个BigDecimal类的使用方式
类型转换问题
- 强类型转换:高–>低,可能会产生内存溢出或者精度缺失问题,精度缺失问题是当涉及到浮点数进行强转时会发生,如:(int) 3.5 = 3;
- 自动类型转换:低–>高,是安全的类型转换,当涉及到不同类型进行运算时会发生自动类型转换成同一类型然后进行计算
jdk7中的新特性,数字之间可以用_进行分割,从而方便阅读
下面是一个容易弄错的算术问题(运行结果放在最后展示,方便大家先行进行思考):
int money = 10_0000_0000;
int month = 20;
int total = money * month;
System.out.println(total);
System.out.println("===========");
相信有些人已经发现了,由于int的范围是-2^31 ~ 2^31-1,而total范围超过了这个范围所以会发生内存溢出,从而得不出正确答案,这个时候就有人想到了,那把total的类型改成long接收不就行了吗,那么接着看
long total2 = money * month;
System.out.println(total2);
System.out.println("===========");
其实如果就是这么简单,我也不会拿来放在这里展示了,由于money和month都是int类型的,最终虽然我们将结果total改成了long类型,但其实在money*month进行计算的时候结果就已经发生了溢出,再进行转换成long类型,也其实无济于事,那么最终该如何解决呢?
其实我们只需要将其中一个类型先进行转换,这样进行计算的时候就会都变成了long类型进行计算,从而不会产生溢出问题,那么很多小伙伴又有问题了,为什么一开始就不直接定义成long类型呢,咳咳咳,我只想说谁叫这是个题目呢,哈哈哈哈哈
long total3 = money * ((long)month);
System.out.println(total3);
- 结果页
位运算
位运算是针对于二进制进行的运算,所以速度效率方面比之普通的四则运算更高
A = 0011 1100
B = 0000 1101
A&B:比较AB对应每一位上的数,都为1才为1,所以A&B = 0000 1100
A|B:比较AB对应每一位上的数,有一位为1就为1,所以A|B=0011 1101
A^B: 比较AB对应每一位上的数,相同为0,不同为1,所以A^B=0011 0001
<<:左移运算 >>:右移运算
记住一句口诀:左移乘于2,右移除于2
字符串连接问题
比较两个图大家就会发现,当进行字符串拼接的时候,需要格外小心,由于拼接字符串的位置不同可能也会造成结果不同,所以为了方便起见,()括上就显得非常重要了
在文章最后强烈推荐一波B站UP主:狂神,他的视频无论是细度还是深度都非常适合学习Java的小伙伴,算是这么多年来看过的最良心的视频了,最主要的还是免费,免费,免费!!!视频链接在下方
狂神说Java😜😜😜