数据类型
Java虚拟机操作的数据类型可以分成两大类,
基本类型和
引用类型。引用类型的变量的值是指向对象的,而不是对象本身,相反,基本类型的值并不指向任何东西,存储的是它们的真实数据。数据类型的分类如下图所示:
所有java语言的基本类型都是java虚拟机的基本类型。虽然boolean作为java虚拟机的基本类型,但是java虚拟机对boolean的支持是非常有限的,当编译器把java源代码编译成字节码时,boolean通常会被替代为ints或者bytes。在java虚拟机中,false用整数0表示,true用非0整数表示,涉及到boolean值的操作用ints替代。boolean数组会被作为byte数组来访问。
java虚拟机的数字类型分为
整数类型和
浮点类型。跟java语言一样,java虚拟机的基本类型在任何地方范围都是固定的,与底层的平台无关。
java虚拟机有一种数据类型是java语言没有的:returnAddress类型。这种类型用于实现java语言中finally语句。
java虚拟机引用类型的值有三种:class类型,interface类型和array类型。这三种类型都是动态创建对象的引用,值为null的引用变量表示不指向任何对象。
java虚拟机规范定义了每种数据类型的值的范围,但是并没有定义它们的大小,存储数据类型的值要用到的bit位由各自的实现者决定。各种数据类型的范围如下图所示:
Word的大小
Java虚拟机中的数据值大小的基本单位是
word —— 由java虚拟机实现的设计者决定的固定值。word的大小必须足够大来容纳一个byte,short,int,char,float,returnAddress或者reference类型的值。两个word必须要足够大来容纳一个long或者double类型的值。所以一个word的大小至少要32位(int占32位),word的大小经常被定为主机平台的一个native指针的大小。
很多java虚拟机数据区的规范都是基于word这个抽象概念的。例如,java栈的两个部分——本地变量和操作数栈,都是根据word来定义的。这些区域可以包含任何虚拟机数据类型的值。