(为了好记:1248,4821)
数据类型 占多少位 字节
byte 8位 1个字节
short 16位 2个字节
int 32位 4个字节
long 64位 8个字节
float 32位 4个字节
char 16位 2个字节
boolean 8位 1个字节 (这个貌似有点争议)
在《Java虚拟机规范》一书中的描述:“虽然定义了boolean这种数据类型,但是只对它提供了非常有限的支持。在Java虚拟机中没有任何供boolean值专用的字节码指令,Java语言表达式所操作的boolean值,在编译之后都使用Java虚拟机中的int数据类型来代替,而boolean数组将会被编码成Java虚拟机的byte数组,每个元素boolean元素占8位”。也就是说JVM规范指出boolean当做int处理,也就是4字节,boolean数组当做byte数组处理,这样我们可以得出boolean类型占了单独使用是4个字节,在数组中是确定的1个字节。
扫描二维码关注公众号,回复:
739144 查看本文章
自动装箱与自动拆箱
基本数据类型 |
包装类 |
byte |
Byte |
short |
Short |
int |
Integer |
long |
Long |
char |
Character |
float |
Float |
double |
Double |
boolean |
Boolean |
自动装箱和拆箱的原理:
其实自动装箱和自动拆箱都是编译器为我们做的额外操作。也就是说装箱和拆箱是编译器认可的,而不是虚拟机。编译器在生成类的字节码时,插入必要的方法调用的,虚拟机只是执行这些字节码而已。
下面代码:
Integer ii = 100;
ii += 200;
System.out.println("ii:" + ii);
对于这段代码,大家应该都不会陌生,现在我们通过反编译来看看代码是怎样的呢?
Integer ii = Integer.valueOf(100); //自动装箱
ii = Integer.valueOf(ii.intValue() + 200); //自动拆箱,再动装箱
System.out.println((new StringBuilder("ii:")).append(ii).toString());
我们可以看到编译器帮我们做了一些事,帮我们调用了一些方法。
来源总结:
百度以及