博主在项目中遇到了这个需求開始用的int类型进行运算,字段是存的字节然后后台进行相应的逻辑运算返回给前台,前台来转化成GB大家都知道1GB=1024MB,1MB=1024KB1KB=1024Byte,所以1GB=24=Byte。
所以问题来叻1GB的数据我后台就要存Byte,然后两个int
类型进行相加直接溢出
我们先来回顾下java的8种基本数据类型,Java语言有8种基本数据类型 分别用于存储整数、浮点运算溢出处理数、字符数据和布尔类型数据。
从上图中可以看出 基本数据类型主要分为4大类 (整数类型、浮点运算溢出处理類型、char、boolean), 整数类型又分为了4小类(byte、short、int、long), 浮点运算溢出处理类型也分了2小类(float、double)这些数据类型的区别是怎样的?通过下图展示叻这8种数据类型的存储空间及使用场景:
存储字节数据(较常用) |
兼容性考虑(很少使用) |
存储双精度浮点运算溢出处理数(常用) |
存储邏辑变量(true、false)(常用) |
ok回顾完了,我们来看下int类型的数据范围-2的31次方 ~ 2的31次方-1
(这个符号不好打出来反正你懂得哈哈),即- ~
大约正負21个亿多些。
我1GB都十几亿了也就是说,我int类型只能运算2GB的数据对于存储文件信息显然是不行的。
这里两个long
类型是不能直接进行相加的運算的所以这里用BigDecimal
封装下进行相加运算。
直接输出add
也可以得到求和的数据但博主项目中返回给前台是long类型,所以进行了下类型转换add.longValue()
ok叻,希望对你有帮助