基本数据类型(4类8种)
数据类型 | 关键字 | 内存占用 | 取值范围 | 说明 |
---|---|---|---|---|
字节 | byte | 1个字节 | -128 ~ 127 | |
短整型 | short | 2个字节 | -32768 ~ 32767 | |
整型 | int(默认) | 4个字节 | -231 ~ 231-1(21个亿) | |
长整型 | long | 8个字节 | -263 ~ 263-) | |
单精度浮点数 | float | 4个字节 | 1.4013E-45 ~ 3.4028E+38 | 能表示7为小数 |
双精度浮点数 | double(默认) | 8个字节 | 4.9E-324 ~1.7977E+308 | 能表示16位小数 |
字符型 | char | 2个字节 | 0 ~ 216-1 | |
布尔型 | boolean | 1个字节 | true、false |
引用数据类型(5种)
- 类
- 数组
- 接口
- 枚举
- 注解
- 记录
数据类型转换
- 什么时候会发生数据类型转换?
① 等号左右两边类型不一致时
② 不同类型的数据做运算时 - 什么时候会发生自动类型转换?
① 将取值范围小的数据类型赋值给取值范围大的数据类型时:小自动转大
② 取值范围小的数据类型与取值范围大的数据类型做运算时:小自动转大 - 什么时候会发生强制类型转换?
① 将取值范围大的数据类型赋值给取值返回小的数据类型时 - 基本数据类型按范围从小到大排序
byte、short、char < int < long < float < double - 强制数据类型转换案例
public class HelloWorld { public static void main(String[] args) { float num1 = 10.5; // 10.5默认是double类型,需要强制转为Float类型,否则会报错 float num2 = 10.5F; // 声明是float类型 float num3 = (float)10.5; // 强转 } }
- 强转注意事项
① 强转可能会导致精度损失、数据溢出问题
② byte、short定义的时候如果等号右边是整数常量并不超出取值范围jvm自动转型了
③ byte、short定义的时候如果等号右边有变量参与,自动提升为int,将结果再次赋值给byte、short变量,需要手动强转
④ char类型参与运算会提升为int型,并转为ASCII对应的数值,如果ASCII中没有,则会去unicode中查找