JAVA虚拟机结构之数据类型

  • JAVA虚拟机在编译和执行我们的程序的过程中,同样是要依赖数据类型,来对不同数据、运算操作、引用等信息进行区分。JAVA虚拟机的数据类型与java语言的相似,但是却不能混淆为同一事物。JAVA虚拟机的数据类型可以分为这两类:原始类型(primitive type,也翻译为原生类型或基本类型)和引用类型。与之对应,也存在原始值和引用值两种类型的数值。

原始类型(primitive type)


  • 原始类型包括数值类型,boolean类型和returnAddress类型三种
数值类型

  • byte类型:值为8位的有符号二进制补码整数,默认值为0;
  • short类型:值为16位的有符号二进制补码整数,默认值为0;
  • int 类型:值为32位的有符号二进制补码整数,默认值为0;
  • long类型:值为64位的有符号二进制补码整数,默认值为0;
  • char类型:值为16位的无符号二进制补码整数,默认值为Unicode的null码点(’\u0000’);
  • float类型:值为单精度浮点指数集合中的元素,或是单精度扩展指数集合中的元素,默认值为正数0;
  • double类:值为双精度浮点指数集合中的元素,或是双精度扩展指数集合中的元素,默认值为正数0;
Boolean 类型

  • 值为布尔值的true和false;
  • 另java语言中的boolean类型进入虚拟机时是转换为int类型,与该Boolean类型无关;
returnAddress类型

  • returnAddress类型是指向某个操作码的指针,此操作码与Java虚拟机的指令相对应。在虚拟机支持的原始类型中,只有该类型不能直接与java语法中的数据类型相对应。
  • returnAddress类型会被JVM中的无条件转移指令jsr、ret和jsr_w指令所使用,returnAddress类型的值指向一条虚拟机指令的操作码。但是jsr、ret和jsr_w指令主要用来实现finally语句块,后来改为冗余finally块代码的方式实现,到了JDK7时,JVM中已不允许Class文件内出现这几条指令,returnAddress类型也就名存实亡。

引用类型


  • Java虚拟机的引用类型包括三种:
  • 类类型(class type):指向动态创建的类实例;
  • 数组类型(array type):指向数值实例;
  • 接口类型(interface type):指向实现了某个接口的类实例或数组实例;
  • 在引用类型中还存在一个特殊的值:null,当一个引用不指向任何对象时,它的值就是null,一个为null的引用可以转换为任意的引用类型,null也就是引用类型的默认值;

猜你喜欢

转载自blog.csdn.net/u014296316/article/details/82503102