面试中你所要知道的:Java几个基本数据类型以及装饰类对象,自动拆箱/装箱

(为了好记: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个字节。

 
 

自动装箱与自动拆箱



基本数据类型

包装类

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());

我们可以看到编译器帮我们做了一些事,帮我们调用了一些方法。

 来源总结:

百度以及

https://blog.csdn.net/javawcj123/article/details/47344263

猜你喜欢

转载自blog.csdn.net/u012190514/article/details/80282224