一、8种基本数据类型简介
Java语言共提供了8种原始的数据类型(byte, short, int, long, float, double, char, boolean)
这些数据类型不是对象,他们一旦被声明后就会立刻在栈上分配内存空间
- 其他类型均为引用类型,指向对象实体,在声明时不会被分配内存空间,只是存储了一个内存地址。
不同数据类型对比
我们直接从基本数据类型的封装类中的SIZE中得到其大小:
public static void main(String[] args) {
System.out.println("byte: " + Byte.SIZE);
System.out.println("取值范围:" + Byte.MIN_VALUE + "~" + Byte.MAX_VALUE);
System.out.println("short: " + Short.SIZE);
System.out.println("char: " + Character.SIZE);
System.out.println("int: " + Integer.SIZE);
System.out.println("long: " + Long.SIZE);
System.out.println("float: " + Float.SIZE);
System.out.println("double: " + Double.SIZE);
}
输出结果是:
byte: 8
取值范围:-128~127
short: 16
char: 16
int: 32
long: 64
float: 32
double: 64
二、关于boolean类型
大家应该注意到,上面的测试中并没有测试boolean
的大小
这是因为boolean
的大小是不确定的,这里给出官方文档的描述:
boolean: The boolean data type has only two possible values: true and false. Use this data type for simple flags that track true/false conditions. This data type represents one bit of information, but its "size" isn't something that's precisely defined.
翻译过来就是: boolean
这个数据类型只有两个可能的值:true
或false
。使用这个数据类型是为了简化跟踪真/假情况的标志。这个数据类型表示的数据是一位,但是它的“size”无法准确定义。
不过,在《Java虚拟机规范》一书中的描述:“虽然定义了boolean这种数据类型,但是只对它提供了非常有限的支持。在Java虚拟机中没有任何供boolean值专用的字节码指令,Java语言表达式所操作的boolean值,在编译之后都使用Java虚拟机中的int数据类型来代替,而boolean数组将会被编码成Java虚拟机的byte数组,每个元素boolean元素占8位”
因此,也可以说boolean占用4个字节(因为编译后用int来代替),而boolean数组中每个元素占1个字节
三、需要注意的地方
- Java语言中,默认声明的小数为double类型,因此在对float类型的变量进行初始化时需要进行类型转换,如:
float f = 1.0f;
或
float f = (float)1.0;
- 类似的,默认声明的整数位int类型,因此在对long类型的变量进行初始化时同样需要进行类型转换,如:
long l = 3l;
或
long l = 3L;
或
long l = (long)3;