Java有8中基本数据类型 六种数字类型(其中四个整数型,两个浮点型),一种字符类型,还有一种布尔型。
数字类型
整数型
byte
byte数据类型是8位、有符号的,以二进制补码表示的整数;
(256个数字),占1字节,范围为 -27 到 27-1;
byte类型用在大型数组中节约空间,主要代替整数,因为byte变量占用的空间只有int类型的四分之一;
short
short数据类型是16位、有符号的以二进制补码表示的整数,占2字节;
范围为 -215 到 215-1;
Short数据类型也可以像byte那样节省空间,一个short变量是int型变量所占空间的二分之一;
int
int数据类型是32位、有符号的以二进制补码表示的整数;占4字节
范围为 -231 到 231 - 1;
一般整型变量默认为int类型;
long
long数据类型是64位、有符号的以二进制补码表示的整数;占8字节
范围为 -263 到 263 -1;
这种类型主要使用在需要比较大整数的系统上;
浮点型
float
float数据类型是单精度、32位、符合IEEE 754标准的浮点数;占4字节 -3.4E38- 3.4E38。。。浮点数是有舍入误差的
float在储存大型浮点数组的时候可节省内存空间;
double
double数据类型是双精度、64位、符合IEEE 754标准的浮点数;
浮点数的默认类型为double类型;
double类型不能表示精确的值
字符类型
char
char类型是一个单一的16位Unicode字符;用 ‘’表示一个字符。
java 内部使用Unicode字符集。他有一些转义字符,占2个字节
最小值是’\u0000’(即为0);
最大值是’\uffff’(即为65,535);可以当整数来用,它的每一个字符都对应一个数字
布尔型
boolean
boolean数据类型表示一位的信息;
只有两个取值:true和false;
这种类型只作为一种标志来记录true/false情况;
字节占用数并无精确定义,跟虚拟机具体实现有关系
测试代码
<dependency>
<groupId>org.openjdk.jol</groupId>
<artifactId>jol-core</artifactId>
<version>0.10</version>
</dependency>
public class Test {
private byte a;
private int b;
private short c;
private long d;
private float e;
private double f;
private char g;
private boolean h;
public static void main(String[] args) {
Test test = new Test();
System.out.println(ClassLayout.parseInstance(test).toPrintable());
}
}
打印结果如下
OFFSET SIZE TYPE DESCRIPTION VALUE
0 4 (object header) 01 00 00 00 (00000001 00000000 00000000 00000000) (1)
4 4 (object header) 00 00 00 00 (00000000 00000000 00000000 00000000) (0)
8 4 (object header) 05 c1 00 f8 (00000101 11000001 00000000 11111000) (-134168315)
12 4 int Test.b 0
16 8 long Test.d 0
24 8 double Test.f 0.0
32 4 float Test.e 0.0
36 2 short Test.c 0
38 2 char Test.g
40 1 byte Test.a 0
41 1 boolean Test.h false
42 6 (loss due to the next object alignment)
Instance size: 48 bytes
Space losses: 0 bytes internal + 6 bytes external = 6 bytes total