一、什么是引用数据类型
数组,类,接口被称为引用数据类型,共同特点是,他们的字面值并不是一个“值”而是一段地址。
二、定义(创建)
过程如下(以数组为例)
由上可知,引用变量存储的是一个地址,地址指向堆中存储arr实际内容的一片区域(虽然java中并没有指针,但不代表java不使用指针,指针只是被封装在java编译器内部,我们无法窥见而已。)由于存储的是一个地址,所以无论是数组还是类和接口,他们的长度都是一样的,是一个地址的长度(一个地址多长呢?如果是64bit的jdk就是64bit,如果是32bit的jdk就是32bit)
三、调用
1、先说基本类型变量的调用,对于基本数据变量来说,对变量的操作一般是对变量的“值”的操作。例如赋值:i1 = i2,变化的是变量的值。
2、再看引用类型变量,引用变量的调用分两种,一种是对引用变量本身的调用,一种是对引用变量的元素的调用。
对于引用变量本身的调用,调用的是引用变量的地址值,也可以理解为引用变量的值就是地址值。
对于引用变量的元素的调用,也要分情况:一种是调用的元素本身也是一个引用变量,那么按调用引用变量本身来算;如果调用的是元素是基本变量类型,那么按照调用基本变量类型来算。
四、特殊的String
有一个说法String是一种特殊的引用变量类型,特殊在哪里呢?说他是引用变量,是因为它的内存方式,说它特殊也在它的内存方式。
如果我们想改变字符串的内容,系统会首先查看常量池内是否有我们要改成的字符串,如果有就直接把地址改过去,如果没有,就创造一串新的字符,并把地址改过去。
因此说String是引用变量,是因为它存储的是地址,地址指向一段字符串,说它特殊是因为对字符串内容进行改动时,一定会影响到字符串的地址,也就是字符串的值。