Java虚拟机结构(一):数据类型
本文的内容实际上是对《Java虚拟机规范(Java SE 8版)》第2.2章节的一个笔记概述。
在学习 JVM 之前,我们首先对虚拟机中的数据类型做一个基本的认识。与 Java 程序语言中的数据结构类似,Java 虚拟机可以操作的数据类型可分为两类:原始类型和引用类型,与之对应也存在原始值和引用值两种类型的数值,他们可以用于变量赋值、参数传递、方法返回和运算操作。
原始类型
Java 虚拟机所支持的原始数据类型包括数值类型、boolean 类型和 returnAddress 类型三类。
数值类型
数值类型又分为整数类型和浮点数类型,具体如下表所示:
数值类型 | 位数 | 默认值 | 取值范围 | |
整数类型 | byte | 8位有符号 | 0 | [-2^7,2^7-1] |
short | 16位有符号 | 0 | [-2^15,2^15-1] | |
int | 32位有符号 | 0 | [-2^31,2^31-1] | |
long | 64位有符号 | 0 | [-2^63,2^63-1] | |
char | 16位无符号 | \u0000 | [0,2^16-1] | |
浮点数类型 | float | 32位单精度浮点数 | 正数0 | - |
double | 64位双精度浮点数 | 正数0 | - |
boolean类型
Java 虚拟机没有提供 boolean 值专用的字节码指令,Java 语言表达式所操作的 boolean 值,在编译后都使用虚拟机中的 int 数据类型代替。另外,boolean 类型数组在虚拟机中会被编码成 byte 类型数值,每个 boolean 元素占8位。
returnAddress类型
returnAddress 类型的值指向一条虚拟机指令的操作码。与数值类型相比,returnAddress 类型在 Java 语言中并不存在对应的类型,而且也无法再程序运行期间更改。
引用类型
Java 虚拟机中有三种引用类型:类类型、数组类型、接口类型。这些引用类型的值分别指向动态创建的类实例、数组实例和实现了某个接口的类实例或数组实例。
除三种引用类型外,在引用类型的值中还有一个特殊的值—— null
,它是所有引用类型的默认值。
数组类型
一个多维数组类型可以看做是由两维的数据构成:在外维的称为组件类型,在里维的称为元素类型。
组件类型也可以是数组类型,例如 int[][][]
的组件类型可以看做是int[][]
;而元素类型必须是原生类型、类类型或接口类型之一。
参考
- 《Java虚拟机规范(Java SE 8版)》 第2.2章节
如果觉得我的文章对您有帮助,请随意打赏。