
1. 基本数据类型
1.1. 整型
| 类型 | 存储需求 | 取值范围 |
|---|---|---|
| byte | 1字节 | -128 ~ 127 |
| short | 2字节 | -32768 ~ 32767 |
| int | 4字节 | -2147483648 ~ 2147483647 |
| long | 8字节 | -9223372036854775808 ~ 9223372036854775807 |
取值范围规律为:2^(字节N * 8 - 1),比如:2个字节取值范围:2^(2 * 8 - 1) = 2^15
1.2. 浮点型
float: 4字节,double: 8字节
1.3.char类型
char:2字节
char类型用于表示单个字符。通常用来表示字符常量。
1.4. boolean类型
boolean:占用存储看jvm实现,有些jvm用0、1表示,有些用false、true表示
boolean(布尔)类型有两个值:false和true,用来判定逻辑条件。整型值和布尔值之间不能进行互相转换。
2. 引用数据类型
除了基本数据类型以外的类型,都是所谓的引用类型。
3. 类型转换
在Java中,将一种类型的值赋值给另一种类型是很常见的。boolean 类型与其他7种类型的数据都不能进行转换,char 类型不支持自动转换成它,只支持强制转换,除了这两种类型有些特殊以外,其他6种数据类型,它们之间都可以进行相互转换,只是可能会存在精度损失。
将6种数据类型按取值范围的大小顺序排列一下:double > float > long > int > short > byte
3.1. 自动类型转换
自动转换:隐式的,对程序员无感知
自动转换时会进行扩宽(widening conversion)。
因为较大的类型(如int)要保存较小的类型(如byte),取值范围是足够的,不需要强制转换。
在自动类型转化中,除了以下几种情况可能会导致精度损失以外,其他类型的自动转换不会出现精度损失。
》int--> float
》long--> float
》long--> double
》float --> double
除了可能的精度损失外,自动转换不会出现任何运行时(run-time)异常。
3.2. 强制类型转
如果要把大的转成小的,或者在short与char之间进行转换,就必须强制转换。
这也被称作缩小转换(narrowing conversion),因为必须显式地使数值更小以适应目标类型。
强制转换可能会损失精度,主要有两种场景
1、整数类型之间相互转换,如果整数超出目标类型范围,会对目标类型的范围取余数。
2、从浮点类型转成整数类型,会发生截尾(truncation),也就是把小数的部分去掉,只留下整数部分。此时如果整数超出目标类型范围,一样将对目标类型的范围取余数
4. 引用文章
Java 基本数据类型-四类八种:https://zhuanlan.zhihu.com/p/25439066