两大类型
基本数据类型
整型
类型 |
占用空间 |
范围 |
备注 |
byte |
1字节=8位 |
-128~127,占用2^8=256空间 |
没有无符号类型 |
short |
2字节=16位 |
约为±30000,占用2^16空间 |
没有无符号类型 |
int |
4字节=32位 |
约为±21亿,占用2^32空间 |
Java中默认的类型 |
long |
8字节=64位 |
很大很大,占用2^64空间 |
没有无符号类型 |
浮点型
类型 |
占用空间 |
小数位数 |
备注 |
float (单精度) |
4字节 |
6~7位小数 |
定义float变量要加后缀f或F |
double (双精度) |
8字节 |
15位小数 |
Java中默认的类型 |
字符型
类型 |
占用空间 |
备注 |
char |
2字节 |
只能存储单个字符,单引号 '' |
布尔型
类型 |
占用空间 |
备注 |
boolean |
1字节或4字节或1位 |
不同的虚拟机规范占用的空间也不同 |
引用数据类型
- 对象
- 数组
类型转换
转换规则
需要注意的
自动类型转换:低类型到高类型直接转换(隐式类型转换)安全的
强制类型转换:高类型到低类型需要强制(显式类型转换)不安全的
在类型转换中,编译器只关心程序有没有语法问题,不关心值传递是否存在问题
比如:
- 在高类型到低类型转换中,如果没有强制转换,在编译期会报错,但不会考虑强转后的值是否能正常存放到目标类型的变量中
- 如果直接赋值,编译器会自动将值进行转换直到符合语法规则,在运行期间可能发生值溢出
- 如果间接赋值,编译器会根据类型转换规则转换直到符合语法规则,在运行期间溢出的值会从边界从头开始计数