本文的内容实际上是对《Java虚拟机规范(Java SE 8版)》第2.2章节的一个笔记概述。

在学习 JVM 之前,我们首先对虚拟机中的数据类型做一个基本的认识。与 Java 程序语言中的数据结构类似,Java 虚拟机可以操作的数据类型可分为两类:原始类型引用类型,与之对应也存在原始值引用值两种类型的数值,他们可以用于变量赋值、参数传递、方法返回和运算操作。

原始类型

Java 虚拟机所支持的原始数据类型包括数值类型、boolean 类型和 returnAddress 类型三类。

数值类型

数值类型又分为整数类型浮点数类型,具体如下表所示:

数值类型位数默认值取值范围
整数类型byte8位有符号0[-2^7,2^7-1]
short16位有符号0[-2^15,2^15-1]
int32位有符号0[-2^31,2^31-1]
long64位有符号0[-2^63,2^63-1]
char16位无符号\u0000[0,2^16-1]
浮点数类型float32位单精度浮点数正数0-
double64位双精度浮点数正数0-

boolean类型

Java 虚拟机没有提供 boolean 值专用的字节码指令,Java 语言表达式所操作的 boolean 值,在编译后都使用虚拟机中的 int 数据类型代替。另外,boolean 类型数组在虚拟机中会被编码成 byte 类型数值,每个 boolean 元素占8位。

returnAddress类型

returnAddress 类型的值指向一条虚拟机指令的操作码。与数值类型相比,returnAddress 类型在 Java 语言中并不存在对应的类型,而且也无法再程序运行期间更改。

引用类型

Java 虚拟机中有三种引用类型:类类型、数组类型、接口类型。这些引用类型的值分别指向动态创建的类实例、数组实例和实现了某个接口的类实例或数组实例。

除三种引用类型外,在引用类型的值中还有一个特殊的值—— null,它是所有引用类型的默认值。

数组类型

一个多维数组类型可以看做是由两维的数据构成:在外维的称为组件类型,在里维的称为元素类型。

组件类型也可以是数组类型,例如 int[][][]的组件类型可以看做是int[][];而元素类型必须是原生类型、类类型或接口类型之一。

参考

  1. 《Java虚拟机规范(Java SE 8版)》 第2.2章节