Java 中有 8 中基本类型的数据,分别为:
6 种数字类型:byte、short、int、long,此四种为整数数字类型;float、double,此两种为浮点型数字类型;
1 种布尔类型:boolean,即 true 或 false;
1 种字符类型:char。
这 8 种基本类型对应的包装类型分别为:Byte、Short、Integer、Long、Float、Double、Boolean、Character。
基本类型 | 包装类型 | 字节 | 位数 | 默认值 | 范围 |
---|---|---|---|---|---|
byte | Byte | 1 | 8 | 0 | -128~127 |
short | Short | 2 | 16 | 0 | -32768~32767 |
int | Integer | 4 | 32 | 0 | -2147483648~2147483647 |
long | Long | 8 | 64 | 0L | -9223372036854775808 ~ 9223372036854775807 |
float | Float | 4 | 32 | 0F | 1.4E-45 ~ 3.4028235E38 |
double | Double | 8 | 64 | 0D | 4.9E-324 ~ 1.7976931348623157E308 |
boolean | Boolean | 1 | 8 | false | false、true |
char | Character | 1 | 'u0000' | 0~65535 |
对于 boolean 类型,官方文档并未明确定义,它依赖于 JVM 厂商的具体实现。逻辑上理解是占用 1 位,但是实际中会考虑计算机高效存储因素。另外,Java 的每种基本类型所占存储空间的大小不会像其他大多数语言那样随机器硬件架构的变化而变化。这种所占存储空间大小的不变性是 Java 程序比用其他大多数语言编写的程序更具可移植性的原因之一。
另外,Java 中使用 long、float、double 类型的数据时最好在数值后面加上标识 L、F、D 或者 l(小写 L)、f、d,否则会将数值作为整型数据解析。还有 char 类型使用时使用单引号标记,使用双引号标记起来的是字符串。
基本类型和包装类型的区别
(1)对于成员变量来说,如果使用包装类型,不赋值的话默认值为 null,使用基本类型的话是有默认值的
(2)包装类型可用于泛型,而基本类型不可以。
(3)基本数据类型的局部变量存放在 Java 虚拟机栈中的局部变量表中,基本数据类型的成员变量(未被 static
修饰 )存放在 Java 虚拟机的堆中。包装类型属于对象类型,几乎所有对象实例都存在于堆中。
(4)相比于对象类型, 基本数据类型占用的空间非常小。
基本数据类型存放在栈中是一个常见的误区。基本数据类型的成员变量如果没有被 static
修饰的话,就存放在堆中。一般来说不建议使用 static 修饰基本类型的成员变量,应该要使用基本数据类型对应的包装类型。