java数组(Array):数组的下标,为什么从0开始(通俗理解)?

1.数组的由来:

// 变量声明
int a = 1;
int b = 2;
int c = 3;
int d = 4;
...
int n = 20;

// 一个int类型4个字节,一个字节占8位

a.字面引申:

看到上面的这些int数据,都是int类型,有人就想,既然都是一种类型,为什么不能把他们放在一起?用一个变量接收就行了,每一次还要取一个名字(a,b,c,d…),特别麻烦!!

b.通俗解释:

课间操的时候,广播员让某某班赶紧下来,而不是一个一个叫学生名字,让学生下来集合!
班级里,每个学生都有座位号:
一个年级多个班:int-a班,long-b班
在这里插入图片描述

int[]  a= {1,2,3,4,5,6,7,8,9,10}
long[]  b = {11,12,13,14,15,16,17,18,19,20}

每个班级就像一个数组;
而且每个班的座位就只有那么些个!!

数组的特点:

1.同类型元素
2.固定大小(座位有限)

位置有限,那么ArrayList当然得顺应民意出来咯,毕竟数组的长度有限没那么容易,解决问题也是不怎么方便!!

理解不可扩容:因为在创建数组的时候,你说你要3个位置,那么计算机给你3个位置,第四个位置可能被别人申请走了,计算机不可能说,你申请3个位置,他给你多预留2个位置给你,以防你扩容用。想法是美好的,要是预留的位置你不用,那不是浪费了??

2.数组下标为什么从0开始:

int[] a = new int[5];

a.初步理解:

a.上面的int数组申请5片连续的空间地址,就像盗墓的机关门一样,连续的!
b.盗墓的机关门,先看见第一个门,然后才能见到另一扇门,数组的空间和机关门类似,如图:
在这里插入图片描述

c.第一扇门,为了记住门,不迷路,于是你给门上弄了一个1001的门牌号:1001门开了
d.闯过1001,你的脚踏入下一道门,为了记住自己走过多少道门,只有每走一扇门,就在第一道门上累加:

第几扇门		       地址  索引  最终地址
第二扇门记做int[1]1001 + 1 = 1002
类推:
第三扇门记做int[2]1001 + 2 = 1003
第四扇门记做int[3]1001 + 3 = 1004
第五扇门记做int[4]1001 + 4 = 1005

回头看:
第一扇门记做int[0]1001 + 0 = 1001

发现规律:数组知道第一个位置地址后,后面的地址可以根据规律计算

b.加深理解:

int[0] = 100;
int[2] = 200;

//int 占4个字节

假设数组中第一扇门的地址记做2001那么因为int占4字节,需要往下数3个位置 + 1001的位置储存100这个值
那么:2001 、2002、003、2004这四个地址用来存储100
在这里插入图片描述

  1. 这样计算储存地址的时候,很方便!!!
    计算公式:储存起始地址 = 原始地址 + 索引*字节
    
    假设存放的是:int类型,原始int[0]的地址 = 1001
    现在要存放100这个值,那么计算机就会计算得知:1001 + 0*4 = 1001;
    从1001位置开始(包含1001),4个位置,存的就是 100
    
  2. 不用在门上一个一个的标记

数组内存分配之堆栈:https://blog.csdn.net/lcl19970203/article/details/54428358

  • 7
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值