00:00
那接下来咱们来看这个第三组,第三组呢称为叫数组操作指令,在我们讲了第一个叫创建这个对象或者是数组之后呢,我们就可以针对数组的元素呢来进行这个操作了,这里边的操作呢,主要分成两类,一类呢叫做store,一类呢叫做load。那提到store和load的话呢,大家可能会想到咱们在一开始讲这个指令的时候呢,这个第一组就提到了加载跟存储对吧,那加载的话呢,也叫做load,存储的话呢,这块也涉及到了叫做store。那对吧,这样的两类指令,那咱们这里边儿呢,我并没有把这个加载跟存储呢,放在咱们一开始的这个里边,因为呢,呃,对于咱们现在这个情况来讲呢,引用数据类型数组嘛,它得先创建,然后才能够调用,所以这块呢,我就放在这儿了,当然你要说我们把这个现在讲的这个store和load呢,放在一开始这里边行不行呢,也能理解。也是可以的啊,也是可以的,当然这里边儿有一个小细节的区别,区别是什么呢?就是咱们在前面讲这个加载与存储的时候。
01:01
这个加载的话呢,是把这个数据呢,这个压站压到这个操作数站当中,对吧,那咱们现在的这个也是这样,但是原来我们讲这个道的时候呢,主要是把这个数据呢,存储在是不是局部变量表里边啊。对吧,保存在局部变量表里边,而现在呢,就有一些区别,我们这时候这个store呢,主要是把这个数组的元素,比如说给人家做一个赋值,那你给我到一下保存一下,那咱们知道数组的话呢,这是咱们说的这个虚拟站,这呢是堆空间,真正一个数组它的实体是不是全在这个堆空间里了,所以呢,我们要给数组的某个元素赋值,这个store的话呢,修改的就不是你这个虚拟基站里边的那个局无变量表了,因为局变量表里边不保存数组元素的值。那得去保存到我们这个堆空间当中,你真实的这个数组元素,这所以这个store呢,是修改堆里边那个值,不是修改本地这个局部变量表的。哎,这个呢,有一个区别啊,大家注意一下。
02:00
好,那么具体咱们关注这个细节的话呢,大家会看到,首先呢叫load load前面有个A,因为呢,我们毕竟说数组嘛,属于引用数据类型,所以都带个A,在A前面呢,我们发现呢,以前我们经常说叫ILFDA,这是咱们经常说到的是这样的几类数据类型,对吧,但是这呢,我们也发现了,还有呢叫bcs。B呢,就是BAC叉,然后S是short。没问题对吧?那有同学可能会想,那还少一个布尔类型啊,波尔类型不也可有数组吗?没问题,布尔类型的数组呢,用的也是这个B。也是这个B,所以你看这里边bad跟波尔都是用的这个B啊,这个有个小细节,然后呢,我们这个将一个操作实战中的这个值存储到速度元素中的这个指令呢,呃,用的呢,就是store,或者准确的说呢,叫a store前面呢,也是根据根据你这个数组的这个元素的类型的不同,我们使用的这个相应的这个这个。第一个字母也不一样。
03:01
不用多解释了,对吧,都能理解好,那关于这个数组长度呢,这个咱们等着来说,那具体的话呢,关于这两个指令呢,怎么去使用,下边呢,有一个举例。有个举例,比如说S啊,Clo表示呢,是压入short类型的数组,或者是char类型的数组啊,具体这个操作呢,等于咱们一一执行的时候呢,带着大家来看一下,这个store的话呢,叫IA store,就是给一个int型数组的指定索引呢,进行一个赋值,注意这块呢,会给一个索引,对吧,那索引的话呢,提前也得你加载到我们的操头书站当中。行,那咱们具体呢,就来举例子了。这呢有一个叫set数组操作的这个指令,首先呢,我们创建了一个数组,然后给数组元素赋值,然后呢,接下来呢,去获取一下指定位置这个数组元素的这个值,对吧?我们看下这三行这个代码,它对应的这个操作应该是什么样子的,这呢我们做一个这个view。展示,那这块出来了,我们要看的呢是。
04:02
赛瑞。对吧,哎,就这里边这个操作,那这里边儿的这个操作呢,大家需不需要我们再放到这个Excel里边拿过来吧。真的,我把它放大一点。行,那这块呢,咱们再做一个分析,那对应的这个代码呢,咱们也给他拿过来。看着这个代码量呢,实际上并不大。但是我们看一下具体这个操作的细节,首先呢叫BI push10,那这块呢就放个十。啊,过来了。是行,这就放这个是,然后的话呢,我们new array,我们去了一个具体的数组,对吧。行,那这儿呢,我们就用一个具体的数组,那这块呢,保存的肯定也是我们这个数组的一个索引地址。我就举个例子,比如说叫0X3344行,然后就指向了你真正对空间里边你用的那个数组了。
05:04
那具体用在哪个数数。行,那当然了,这里边我们你在用这个数组的长度是不是十啊,这个十呢,我们就相当于给使用了,那它呢就出去了,然后在接下来呢,我们叫a store_一把这个值呢,就保存在我们这个缩引为一的位置啊,0X3344。那就放在这儿,那相当于它保存过以后呢,这个也就出站了。接下来我们这有个叫lo的下线一把这个0234呢再拿过来。拿过来,拿过来以后,接下来一个I cost3 icon3这块,我们就这个加载了一个常量三,再接着呢,叫BI push30,呃,20这块又放个20。行,这块是不是放了三个对吧,然后下边呢,叫I atore itore这块就提到这个叫保存,保存什么呢?大家你回过来看我这里边描述。比如说ITO看我这块都写了,说在I store执行之前操作数占占顶,需要呢准备三个元素,我这呢把这个盯一下。
06:07
它呢需要准备三个元素值,索引和数组的引用,然后iOS store呢会弹出这三个值,并将值复制给数组中指定索引位置的,索引的这个位置说的非常清楚。当我们去执行这个。在哪呢?在这呢,当我们要执行这个l store的时候呢,我们说需要有三个值,这个具体你你看这咱们是要给所以为三的这个数组的元素复制为20,你得有这个值20,所以呢是三数组引用呢,是这需要这三个值,当我们调用这个指令的时候,对吧,咱们这呢给大特殊一个颜色,我调用这个指令的时候呢,这三个指呢,就全都出战了,出战之后呢。那就相当于我们通过这个地址呢,就找到你堆空间的那个数组了,通过这个三呢,就找到那个索引是三的那个位置了,然后把这个值呢复制为20。
07:00
就是这样的一个操作细节,行,那复制完以后,那咱们这个呢,就也都没有了,对吧。行,就成这样的了。嗯,然后呃,顺便的话,我们这块呢,是不是get static你哎这这就下边具体的我们要打印下边这个事了,那get static呢,把我们这个system out。这咱们刚才提到关于这个静态的这个字段呢,就拿过来,然后再往下呢,LO1又把这个0X3344呢拿过来对吧,然后ICON1那这块呢,再整个一。然后ILO ILO。是不是就到这儿了,说呢,嗯,这个X就相当于I了,在操作要求操作是占占顶的元素是数组的索引I,然后这个占顶的顺位的第二元素呢,是你这个数组引用A,然后这个指令的一直行会把这两个元素呢出站,把这个A下划线,呃,A角标I重新压入站这个站当中,那就意味着你看这呢是我们这个数组这个引用,这呢是你这个索引,然后他俩在执行这个。
08:06
I a load。这个I ILO是吧,在执行这个指令的时候呢,他俩呢,就出战了。他俩一出站呢,这个我们就通过它呢,就找到了你对空间中的那个数组,找到角标为一那个位置上元素,那个元素呢,在咱们当前问题当中,是不是就是零啊,然后把那个零的那个值呢,再压回来,那就相当于又放在这儿了。这就是个零。刚才有提到了,因为他还要把这个数据呢,是再重新压入这个这个站当中,对吧?呃,压入堆栈,其实我们这主要指的就是就说的是站,那有时我们说堆栈其实说的就是战啊好,那这块呢,这个零呢就过来了,过来之后呢,我们再去调这个print方法,就相当于是通过alt呢,调它内部的那个print方法,开辟一个新的战争,然后把这个零呢作为参数呢,给它传进去,那就相当于输出了一下我们这个零这个值,那相应的这个也没有了,这个呢也出战了。
09:00
哎,就这样的情况对吧,行,这里边儿呢,我们就介绍清楚来这两个指令,那这块呢,它需要我们准备的有三个值。准备有三个值,这个呢,需要准备有两个值对吧,那这个大家清楚。好,这呢是咱们说的关于这个数组元素的一个这个赋值啊,包括调用啊,这样的一个情况,还有一个呢,是涉及到数组的一个长度的获取。这个哎,数字长度获取之前,咱们再把这个再说一下啊,把这个打开。大家看一下这,呃,我这儿呢,为什么要把它列出来呢,你看一下这个类型比较特别是一个布尔类型的对吧。那刚才咱们说的这个bird类型操作的话呢,是不是也是用这个B,然后a store啊或者blo对吧,那这块我们打开之后呢,重新做一个编译。那编译完以后呢,我们这块再做一个刷新,好这时候大家再看这个code,此时的话呢,咱们去找,那主要呢就在这块。在这块对吧,那这块呢,我们首先得压入了一个十,然后你一个数组,然后接下来你看这这块,嗯,S啊,这个A和so这个这个还不是我们说重点看的,因为你是个引用数据类型,所以呢,保存这个是a store,这没问题,关键就是我们下边这块有一个具体的赋值操作,对吧?赋值操作的时候呢,当然你看到我们主要用到的这个在赋值的时候是不是b a store啊。
10:18
Be store跟咱们上边呢,这个上边咱们在保存的时候呢,是I a store,因为你这是in的类型,那布尔类型呢,就是B开头的那这块改成bad类型的也是它。所以这里边儿我们主要想强调的就是这个是吧。那注意一下这个问题行,然后呢,咱们再来看一下,说到这个长度的问题,叫a lance说该指令呢,弹出占顶的数组元素,获取数组的长度呢,把长度呢再压到这个站当中。哎,再压到这个站当中,咱们就看下边这个指令非常简单,就是用了一个数组,然后呢,获取一下它的这个长度,这个咱们就直接呢把它打开就行。好,咱们在这呢,做一个简易的一个图分析就行,这呢是咱们说这个操作数站,那BI push这块放一个十,然后我们做一个new啊,这呢把这个数组呢就创建出来了,比如有个地址0X1111。
11:11
然后呢,二到一把这个地址呢,付给我们的局部变量表,这个缩因为一的位置0X1111,然后这个地址就没有了,这个十也没有了,就是你创建这个数组的时候,这个十其实就没了,对吧。然后get sta呢,就是system的out s.out。然后LO1把我们这个0X啊1111,那就拿过来,然后下边呢叫ala,就是这个时候呢,刚才看到了把我们占顶的这个数组呢,弹出,这弹出站的话呢,获取一下它的长度,这个长度是不是十啊,那这个时候呢,出去之后呢,你再进来一个十。嗯,这个他就出站了,把这个十呢再进来接,再接下来通过这个,所以咱们叫out呢,把这个十呢做一个输出啊,就是这个道理,所以呢是弹出。数组元素对吧,就是你这个数组这个索引,然后呢,获取一个长度之后呢,把长度再压入站,就是这样一个过程。
12:03
行,那这呢,就咱们说的叫数组操作的这些指令。啊,数字操作这些指令,大家呢,熟悉一下,自己呢,理解理解。
我来说两句