
7-3 Java参照数据类型
Java有关变量数据处理可以分成原始数据类型与参照数据类型。
7-3-1 原始数据类型
原始数据类型指的是byte、short、int、long、float、double、boolean、char等8种,这8种原始数据类型最大的特点是当我们定义变量同时设置变量值时,变量值内容是直接放在变量内,如下方左图所示。

例如,有一个声明如下:

这时如上方右图所示,如果执行下列等号运算。

过程如下图所示。

如果执行下列运算。

过程如下图所示。

程序实例ch7_16.java:使用程序设计验证上述执行结果。

执行结果

7-3-2 参照数据类型
除了原始数据类型以外的数据类型都是参照数据类型,例如,目前已经学习的字符串(String)、数组(Array),后面还会介绍类对象,都算是参照数据类型。参照数据类型最大的特点是使用间接方式存取变量内容,本章的重点是数组,所以就用数组做说明。
例如,有一个整数数组声明如下。
int[ ] score={90, 79, 92};
声明完后的内存如下所示。

对于数组变量score而言,所存的内容并不是数组的元素内容,而是一个内存位置,此内存位置才是真正存放数组元素内容的起始地址,在该内存的连续空间才是真正存放元素内容。由于这个范例的数组是整数(32位),8位代表一个内存位置,所以内存位置以每次递增4的方式存放整数,如果数组内容是其他的原始数据类型,每次递增的数字将会不一样。
参照数据类型在执行指定表达式(=)时,并不是复制整个数据,而是复制所指内存地址。延续score数组,如果执行下列设置:
int[ ] myscore=score;
这时内存如下所示。

假设执行下列语句:
myscore[1]=100;
这时内存如下所示。

如果这时输出score[1]或myscore[1]都可以获得100的结果,其实并没有更改score[1]的值,但是因为这个内存内容被更改了,所以也获得100的结果。这也是参照数据类型的一大特点,所以程序设计时一定要特别留意。
程序实例ch7_17.java:上述参照数据类型的验证。

执行结果
