一、Java的浮点数(float和double)不精确,在需要精确计算的时候 避免使用float和double。
float和double在内存中的存储方式
float类型(32位):1bit(符号位) 8bits(指数位) 23bits(尾数位)
double类型(64位):1bit(符号位) 11bits(指数位) 52bits(尾数位)
浮点数 使用的是科学计数法表示
10000 = 1*10^4 --> 1E4
0.001=1*10^-3 --> 1E-3
二进制很难精确表示浮点数。用近似值表示
二、包装类
Java中每一个基本数据类型都在java.lang包中有一个对应的包装类型。
包装类型作用:
1、提供了一系列实用的方法(属性)。
2、比如集合(泛型)等不允许使用基本数据类型,但又要存放是使用包装类。
装箱:从基本数据类型转为包装类型的过程叫装箱;
拆箱:从包装类型转为基本数据类型的过程叫拆箱
从JDK1.5开始,就提供了自动装箱和自动拆箱功能。
| 基本数据类型 | 包装类 |
| ------------ | --------- |
| byte | Byte |
| short | Short |
| int | Integer |
| long | Long |
| float | Float |
| double | Double |
| char | Character |
| boolean | Boolean |
这八种包装类所继承的父类不全都相同。
1. Integer ,Byte,Float,Double,Short,Long都属于Number类的子类,Number类本身提供了一系列的返回以上六种基本数据类型的操作。
2. Character属于Object子类
3. Boolean属于Object子类。
三、类型转换
1、隐式类型转换(自动类型转换)
整型、浮点型、数字可以进行混合运算的。在运算中,不同的类型会先转换为同一类型,然后再进行计算。
隐式类型转换(自动类型转换)规则:
1、小的类型自动转换为大的类型
2、整型可以自动转换为浮点型,但可能会产生舍入误差。
int 32位=1符号位+31位
float 1bit(符号位) 8bits(指数位) 23bits(尾数位)
double类型(64位):1bit(符号位) 11bits(指数位) 52bits(尾数位)
long 64位=1符号位+63位
3、字符型可以自动转换为整数(int、long)。
2、显示类型转换(强制类型转换)
格式 (type)value。
type就强制转换后的数据类型。
注意事项:
1 强制转换可能导致溢出或精度丢失。
2 在把容量大的数据类型转换为容量小的数据类型时必须使用强制转换
3 浮点型转为整型是通过舍弃小数部分,不是四舍五入。