在随着自己对Java的使用中,发现对于内存的使用掌控月越重要。学习基本类型我们也要掌握内存占用情况,如果以后遇到内存紧张的时刻,在这里就需要使用到基本类型的知识。
基本类型包含
数据类型 | 内存占用 | 值 域 | 默认值 | 虚拟机内部符号 |
---|---|---|---|---|
boolean | 4 byte 如果是数组形势占用一个字节 | false.true | false | Z |
byte | 1 byte | [0,65535] | 0 | S |
short | 2 byte | [-32768,32767] | 0 | B |
char | 2 byte | [0,65535] | '\u0000' | C |
int | 4 byte | [ -2^31 , 2^31-1] | 0 | I |
long | 8 byte | [-2^63, 2^63-1] | 0L | J |
float | 4 byte | [-3.4E38,3.4E38] | +0.0D | F |
double | 8 byte | [-1.8e308,1.8E308] | +0.0F | D |
在做强制类型转换的 前面的可以直接进行转换到后面的类型。
+0.0F == -0.0F 在Java中返回的是数据为真。
+0.0F 是0 , -0.0F是符号位是1,其他位上均是0的参数 。
浮点数的正无穷,正浮点数除以+0.0F、
浮点数的负无穷,负浮点数除以-0.0F、
NaN (Not-a-Number) 分为标准类型与非标准类型。
内存中计算出来的值,能在内存中存在的是标准的NaN。eg: [0x7F800001]
其他类型称为不标准的NaN.
Java的基本类型大小
调用Java方法,会创建一个栈帧。
栈帧主要包含两个组成部分,局部变量区(包含实例方法的this指针和方法接收的参数)和字节码的操作数栈。
long ,double 在虚拟机规范中采用的是两个数组单元来存储。
其他基本类型以及引用类型的值均占用一个数组单元。简单来说就是 boolean,char,byte,short在栈上占用 的空间与int是一致的,32位系统都是4个字节;64位系统是8个字节。
这是栈系统的字节占用,堆上存储数据跟上面列表展示的占用大小是一致的。