前言
当我们开始学习java的时候,除了一些相关术语,第一堂与java编程相关的就应该是学习java的数据类型了吧。可能当别人问起java有哪些类型时,你可能琅琅上口的背出:byte,short,char,int,long,float,double,boolean等。如果你能对类型进行详细归纳,并说出每种类型的取值范围,那么说明你对java的类型已经非常的熟悉了,你也可以选择继续看下去巩固一下基础知识,如果你对此还有些拿捏不清,那么我们一起来看一下java的类型。
1. java语言数据类型和java虚拟机数据类型
Java语言的类型与java虚拟机类型的区别在于,Java虚拟机数据类型包括一个returnAddress类型。returnAddress类型的值指向一条虚拟机指令的操作码。returnAddress类型在java语言之中并不存在,而且无法在程序运行期间进行更改。下面以java虚拟机类型进行讲解。
2. Java虚拟机数据类型
Java虚拟机数据类型可分为两大类:原始类型(primitive type,也经常翻译为原生类型或基本类型)、引用类型(reference type)。与之对应也存在原始值和引用值两种类型的数值,它们可用于变量赋值、数值传递、方法返回、运算操作。
2.1 引用类型与值
Java虚拟机是直接支持对象的,这里的对象可以是指动态分配的某个类的实例,也可以指某个数组。Java虚拟机中用reference类型来表示对某个对象的引用。关于reference类型的值,你可以想象成指向对象的指针。每个对象可能存在多个指向它的引用,对象的操作、传递和检查都通过引用它的reference类型的数据进行。
Java虚拟机中有3种引用类型:类类型、数组类型和接口类型。这些引用类型的值分别指向 动态创建的类实例、数组实例和实现了某个接口的类实例或数组实例。
数组类型最外面那一维元素的类型。叫做该数组的组件类型。一个数组的组件类型也可以是数组。从任意一个数组开始,如果发现其组件类型也是数组,那么继续读取这个小数组的组件类型,不断执行这样的操作,最终可以遇到组件类型不是数组的情况,这时就把这种类型称为本数组类型的元素类型。元素类型必定是原生类型、类类型或者接口类型之一
在引用类型中还有一个特殊的值:null,当一个引用不指向任何对象的时候,它就用null来表示。引用类型的默认值就是null
2.2 原始类型
Java虚拟机支持的原始类型有3种:boolean类型、数值类型、returnAddress类型
2.2.1 数值类型与值
数值类型又分为:整数类型和浮点类型
2.2.1.1 整数类型:
整数类型包括:
- byte类型:值为8位有符号二进制补码整数,默认值为0,取值范围为[-128~127] (-27 ~ 27-1)
- short类型:值为16位有符号二进制补码整数,默认值为0,取值范围为[-32768~32767] (-215 ~ 215-1)
- char类型:使用16位无符号整数表示的、指向基本多文种平面的Unicode码点,以UTF-16编码,默认值为Unicode的null码点(’\u0000’),取值范围为[0~65535]
- int类型:值为32位有符号二进制补码整数,默认值为0,取值范围为[-2147483648~2147483647] (-231 ~ 231-1)
- long类型:值为64位有符号二进制补码整数,默认值为0,取值范围为[-9223372036854775808~9223372036854775807] (-263 ~ 263-1)
2.2.1.2 浮点类型:
浮点类型包括:
- float类型:值为单精度浮点数集合中的元素,或者(如果虚拟机支持的话)是单精度扩展指数集合中的元素,默认值为正数0
- double类型:值为双精度浮点数集合中的元素,或者(如果虚拟机支持的话)是双精度扩展指数集合中的元素,默认值为正数0
2.2.2 boolean类型:
boolean类型的值为true和false,默认值为false。虽然Java虚拟机定义了boolean这种数据类型,但是只对它提供了非常有限的支持。在Java虚拟机中没有提供任何boolean值专用的字节码指令,Java语言表达式所操作的boolean值,在编译后都是用Java虚拟机中的int数据类型值来代替。
2.2.3 returnAddress类型
returnAddress类型是指向某个操作码的指针,此操作码与Java虚拟机指令对应。在虚拟机支持的所有原始类型中,只有returnAddress类型是不能直接与Java语言类型的数据类型相对应的。
3. 总结
在本篇中我们详细介绍了Java虚拟机中的数据类型,及其默认的值,相信读完后对Java的数据类型有了一个更为深刻的认识。将上面的总结为一张图为: