java中基本类型分为8中:分别为整型:byte,short,int(默认),long,浮点型:float,double(默认),字符型:char布尔类型:boolean。每种类型保存的数值都是有一定范围的。当超出这个范围就会产生类型溢出。
而在运算过程中会产生一系列的问题:例如转型。当我们设置的类型的存储范围不足以容纳所存储的值时,可以将类型转换为更大字节的类型。当超过了最大字节类型。就需要使用引用类型解决。
1.整形的类型溢出,产生原因及解决方法:
1.产生原因:整形中,一个 int 型变量占 32 字节,能表示的数据范围为 -2³¹~2³¹-1 之间的整数,即十进制中 -2147483648 至 2147483647 之间的整数。当超出范围后,编译器会提示错误,这个错误即类型溢出,
2.解决方法:但是在以后的学习,工作中,我们难免会遇到更大的数值运算。系统为了更好的解决这个问题,提出大整型(BigInteger)。
注意:它是以字符串方式存放数值的。
3.BigInteger类型:定义方式,加减乘除方法,(加减乘除方法可直接连续调用)
//大整数,引用类型,不能使用运算符,只能通过方法实现加减乘除
//解决整形类型溢出
//()存放字符串类型数据,因为数值类型无法表示更大的数
BigInteger n1 = new BigInteger("134231232412233221");
BigInteger n2 = new BigInteger("134231212414122332");
//加法
BigInteger sum = n1.add(n2);
System.out.println(sum);
//减法
BigInteger sub = n1.subtract(n2);
System.out.println(sub);
//乘法
BigInteger mul = n1.multiply(n2);
System.out.println(mul);
//除法
BigInteger div = n1.divide(n2);
System.out.println(div);
比较方法:为compareTo(),观察其源码可知,当n1>n2时,返回1,相等时返回0,小于时返回-1.
BigInteger n1 =new BigInteger("2147483648");//定义方式
BigInteger n2 =new BigInteger("21474836499999999");//定义方式
//比较大小
int n = n1.compareTo(n2);
2.浮点型类型溢出及其精度丢失的产生原因及其解决方法:
1.类型溢出的原因:同理,当产生范围超出后,就会出现类型溢出。
2.精度丢失:什么叫精度丢失,即浮点型在计算过程中,小数部分会出现多或少的偏差,虽然微乎其微,但是在一些对数值要求严格的领域中,会产生影响。
产生的原因:在计算机中是以二进制保存的的,但是某些小数又无法通过具体的二进制保存,最终只能通过截取无限循环部分的保存。
3.解决办法:针对浮点型,类型溢出及其精度丢失的问题,官方提出了更精确的大浮点型BigDecimal类,其与BigInteger在加减乘除,比较等使用方法相同。
但是在除法中,我们要小心无限循环的问题,系统为我们提供了不同的小数部分保留方式。