认识数组
1.重新认识基本类型的变量
变量的基本逻辑——有定才有变,在人看来,变量固定的是名字,改变的是值;但是在计算机看来,不变的是地址,变化的是值
理解计算机如何使用内存,完成变量的功能
(1)内存就是一堆白纸,只能通过页码编号访问,也就是所谓的内存地址 (2)变量就是使用一个固定的地址加上这个地址对应的内存;计算机通过地址,读写地址对应的内存值,完成变量的赋值和访问值的功能,就好像根据页面编号在白纸上写字,然后擦掉再重复写的过程 (3)变量的名就是地址,变量的实就是地址的内存值
2.认识数组
理解数组的名与实
数组的实是一块地址连续的内存,就像是编号连续的一踏白纸
数组的名,就是这个连续内存的第一个内存的地址
数组的变量和基本变量一样,本身是个地址;但是与变量不一样的是,这个地址的值,是数组的“名”,也就是数组的第一个地址
1 | int[] book = new int[10]; |
创建数组的过程是
先new一个指定长度的数组(就是一块连续的地址)
然后把这一块连续地址中第一个地址的值赋值给变量book
book本身作为一个变量,也是有地址的(比如book的地址),然后book这个变量的值就是new出来的那一块连续地址中的第一个地址
数组=数组变量+数组的实体
数组变量[索引]就是在数组原有地址的基础上,加上索引,获得想要的元素
所以索引是从0开始的,因为索引变量的值就是数组第一个元素的地址,不需要加一
3.数组的长度
数组变量.length可以获得数组的长度
数组创建之后,长度不可以改变
4.数组索引过界和初始值
访问数组过界出错,报错 IndexOutOfBoundsException
如果没有把握数组是否会出界,可以把索引和数组长度做比较,注意索引是从0开始,不是从1开始
数组中每个元素都有初始值,初始值和类型有关,对于数字类型,初始值是0,boolean类型,初始值是false
5.让数组变量指向新的数组
数组变量可以指向新的数组实体,这时候,数组变量的值就是新的数组实体的地址;这种数组变量的赋值操作,叫做让变量指向新的数组
如果没有别的数组变量指向原来的数组实体,也就是说,如果没有变量记得原来数组的地址,原来的数组实体也就不可访问,相当于“消失”了
对于非基本类型的变量,计算机都要通过这种“两级跳”的方式实现,基本类型变量,“一跳”就可以
1 | public class WhatArray { |
输出:
0
数组array1的长度是2
数组array1的长度是3