给数组分配的是连续的内存单元
在内存中给数组分配的存储单元是连续的。
我们是如何访问数组里的任意一个元素呢?
要访问一个元素,就是需要知道该元素在内存中的地址。因为给数组分配的存储单元是连续的,通过数组的引用和数组下标,我们可以推算出每个数组元素在内存中的地址,从而实现访问数组里的任意元素。
数组的引用: 数组在内存中的起始地址,也就是数组第一个元素的地址。
整型数组
以创建一个整型数组为例,执行 ns = new int[] { 68, 79, 91, 85, 62 }
,在内存中分配的是连续的存储单元,也就是数组元素的内存地址是连续的。
ns
│
▼
┌───┬───┬───┬───┬───┬───┬───┐
│ │68 │79 │91 │85 │62 │ │
└───┴───┴───┴───┴───┴───┴───┘
字符串数组
以创建一个字符串数组为例,String[] names = {"ABC", "XYZ", "zoo"}
,字符串数组存储的不是字符串本身,而是字符串的引用。如下所示,数组元素是3个引用,在内存中分配连续的存储单元来存储数组元素。
Java语言中,用数据来保存另外一块内存的的起始地址,那么我们就称这个数据为引用。如下案例中,在连续的内存单元中保存了3个引用,这三个引用保存的内存地址表示指向三个不同的字符串。
┌─────────────────────────┐
names │ ┌─────────────────────┼───────────┐
│ │ │ │ │
▼ │ │ ▼ ▼
┌───┬───┬─┴─┬─┴─┬───┬───────┬───┬───────┬───┬───────┬───┐
│ │░░░│░░░│░░░│ │ "ABC" │ │ "XYZ" │ │ "zoo" │ │
└───┴─┬─┴───┴───┴───┴───────┴───┴───────┴───┴───────┴───┘
│ ▲
└─────────────────┘
他の者にできたか?ここまでやれたか?この先できるか?いいや、仆にしかできない!