Java常见基础混淆知识点

浮点数运算问题

在这里插入图片描述

当浮点数进行四则运算时会出现精度缺失问题,所以当涉及浮点数计算时都会使用BigDecimal工具类进行计算,提供一个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😜😜😜

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值