00:00
行,那咱们接下来呢,就得说,哎,这个参数呢,是引用数据类型呢,该怎么办才能够去解决刚才说的这个数组交换值的这个问题啊,那么关于这个参数是引用数据类型,我呢再写一个。Value。Transfer啊,TEST2好,看这个啊,嗯,这块的话呢,我们还是先有个酶方法,咱们呢先不考虑数组这个,呃,排序的问题啊,还是回归到咱们这个举例子说这个M和N想换序这个事儿啊,还回归到这个问题上,刚才呢那个MN呢,我们也确实也没换成。那现在咱们也想真正的去换乘啊,那我们这样来处理,我把这个M和N封装在一个具体的类当中,我这个类呢叫做data。呃,这里边我定一个变量角M,定一个变量呢,角N这样子啊,那一上来这个没方法,方法是咱们程序的入口了,我呢首先造一个得塔的对象。
01:14
行,做完以后我呢给这个的和负值啊,一个是十,一个是20,那么此时呢,我们先打印一下M和N的值。那这个就是得塔点M了。行这呢应该都清楚,我要打印的话呢,是不是就是十二十二对。这没问题啊,行,那这个完了以后。这个完了以后呢,我现在呢,仍然是想交换M和N的这个值,那这个交换你在这去定一个一对形的去交换,那肯定能画成啊这个都嗯不用多说。
02:06
这个是不是一定能换成,对这个都不用去细说了啊,CTRLCCTRLV一下简单测一下。啊,这种换乘,这个不是咱们现在想说的点,咱现在主要不是就是想放到一个方法里边,哎,咱们看这个用方法怎么去实现啊,那我们在这个上边的哎类测试类当中,咱们定义一个方法,哎,我呢仍然叫做public avoid叫swap,这个时候的参数我写成贝塔类型的,相当于此时的行参呢,是一个饮用水类型。然后在这个里面,我们这样来处理,我呢这样做。CTRLCCTRLV还是站过来的。哎,这样来写的好,写完了。写完了啊,写完以后啊,其实就相当于把这三个代码放到一个方法里了啊,然后在这个位置呢,我们去调一下这个外。
03:05
嗯,调这个swap调的话呢,得需要这个对象。嗯,其实大家可能有时候会稍微有点懵啊,说怎么有时候造对象,有时候又不造对象,直接呢就把方法放进去了,其实呢,核心呢,是因为我们这个没方法,它有一个关键字叫static啊,哎,这种没有static的话呢,必须得通过对象来调,你像咱们刚才写的这个,呃,YouTube,哎这个呢,你也没有在那个这个也没有在,所以呢,就直接不用对象了,直接就这样写就行啊,其实是因为这个原因啊,嗯,好,那这块呢,咱们找了一个对象,我通过这个对象呢去调这个S。那把上面这个data塔放进去,此时的塔呢?是13,是一个影类型的,传递给我们这个形参恰好也叫data塔,好传进去了。进去以后问换换成了我。
04:03
这就是大家有同学想着就纯靠赌了对不对,是吧,能完成不,然后然后你看说诶中了是吧,不能中了,你得分析出来才行啊,为什么这时候你这也是把它C粘过来的,我那会这呢也是CTRLC粘过来的,你这就不行,你这个就行没天理了是吧。这个为什么就成了呢?如果用最简单的话来解释,就是我们刚才那会儿没成,是因为你这有一个MN,这块也有个MN,我是把这个呃,MN这十跟20的值复制了一份,你这块换我这块换不了。而这个问题呢,你要说复制这一份,不是复制这一份这个对象。只是呢,对,复制了一个地址,你这个叫得塔的变量和我这个得塔的变量,咱俩呢,是俩地址,俩地址一样是吧,也是俩变量,但是呢,咱俩是不是指向的堆空间中的同一个对象呀,对,就是咱俩确实是俩变量啊,但是咱俩变量呢,指的是同一个堆空间中的对象。
05:22
哎,然后呢,这个M这个呃,你你你你通过你这个行这个方法的行参你给我画了,那我这个去调是不是也能画了,是这个原因造成的啊,也可以咱们详细的来这块看一下啊,这不我下边这也画这个图了,把这个呢,比如说我就也去掉,咱们简单的再来画一下,这个过程呢,咱们自始至终只要大家呢,在JA法中写变量,写到赋值的,它就一定符合这样的规则啊,所以说呢,这个天天见啊,我们把这个呢,大家都得清楚来看一下啊,哎,我这这个跟他们一样吧,要data上啊有一个站。
06:02
有一个堆。啊,这样子啊,有个这有个堆,然后呢,我们看没方法,没方法呢,一上来我就用了一个得塔。那这个点塔放这儿,然后呢,最空间中扭一下。最关键,重扭一下。哎,就用到这儿了啊,这呢会有一个地址值。哎,这个呢,我们是叫0X啊,7788把这个值付给我们占空间中的这个。通过地址值。占空间中的这个变量指向对空间中的对象试题,哎,我这呢,代码里边是把这个值给写到这了,其实你要不写这也行,咱们就按照咱们刚才写的这个代码来说吧,哎,做完以后呢,咱们在这呢做了一个赋值。
07:01
得点M,这是十。哎,德尔塔点N这个呢,改成20,哎都可以的啊,那我们通过这个塔这个变量呢,调M和N,那一开始呢,M和N呢都是零。嗯嗯,这个过程的话呢,我们也给它刻画出来吧,一开始是零,这也是零,然后呢,我们通过对象的调属性改了值了。这是十。然后接下来下边20。哎,这么着,那这是我们到这一行代码的时候的情况啊,那我们此时去输出,那自然呢,就是十跟20对,然后下面的话呢,我们去调这个S外方法,调它的时候呢,咱们把这个data呢传进去,呃,这个data呢,是作为上面的十参传递给我们,这个行参恰好也叫做data。
08:04
一定要定它。哎,注意这个地方呢,是我们这个方法行参的啊,外里边的这个13传递过来的一看营类型。营类型,你存的呢,就是个地址值了,所以呢是把这个7788。复制这一份。哎,这也是两份啊,两份只不过地址值一样啊,然后你这个地址值有了以后,它也就指向了对空间中的同一个对象时期了。那就剩这么着了啊行,那我们就进入这个方法里了,进来以后的话呢,我们通过这个data塔,就是它,它呢调这个M是十,把它呢付给了一个内部声明的局部变量,那我们在这个站里边还得再给它开一个,那叫做看法是拿我们这个得尔塔得M10。付过来的。所以这这也是十。哎,这也是十行在下面拿得塔的N付给了data塔M,贝塔的N给了贝塔的M,这不就20,把十给覆盖掉了。
09:09
对,把这个就干掉,改成十。十,嗯,接下来你拿这个,嗯,Tap呢又给了n tap呢在这儿tap呢又给了N,把这个十呢,这不又给了这个N呢,把20呢改掉。哎,这个。诶,上面写错了是吧,对,把这个给了他是20啊。这个呢是十。对吧,嗯。哎,把这个time给了他,这就是十了行这个方法呢,就直行结束了,方法执行结束以后,那我们在内部定义的像这个temp,像你这个data,这两个呢,就都出战了。哎,都出站了,他出站以后的话呢,这个指针就没有了。
10:01
这个指针没有了,这个对象会销毁吗?不会,因为你是不是还有别的指针指针呢,对这样的话呢,判断它就不是一个垃圾了啊,你就不能回收了,那么你出来以后呢,我们又蹦到这来了,没方法的这个,呃,后边这块,当你在后边这块如果去输出,嗯,咱们如果是C。哎,我们的这个得塔点M,那我就简写了啊,得塔点N的时候呢,哎,那你这个得塔呢,是你这个贝塔,哎,它的M和N发现呢就换了。啊,就换了,这就我们说的这样的一个情况。通过这个情况的话,咱们抽取出来它的核心实际上呢,还是关于这个变量赋值这块的原因造成的,哎,这个结论其实跟咱们刚才那会儿说的,一开始讲的这个结论呢,又是一样的啊,又是一样的啊,CTRLC一下这个咱们粘过来,这个我就统一粘一起了啊,都粘到这了。说如果这个参数。这个变量咱们就是具体是方法的行差了啊,如果参数呢是引用数据类型,那么此时。
11:06
这个我们说食参,呃,付给这个行参的是这个食参,呃存储数据的一个或者叫存储结构吧,呃存储数据这个数据呢,你可能是一个对象,也可能是一个数组啊哎,存储数据的这个低值值。区别呢就在于一个呢是你的一个数据值,一个呢是一个地址值。啊是这样造成的啊,那咱们这种呢,你发现就换成了这种啊,那这个呢,如果大家理解以后啊,其实跟咱们刚才写的这个在最初的这个里边,其实这个规律都是一样的啊。啊,基本数据类型变量就是传你这个具体的数据存在这个值了啊引用的呢,传的就是一个地址值,这个规律呢,自始至终都是对的,嗯,那么这个要清楚以后呢,大家回过来看咱们这个写的这个U秀呢,咱们最初这样写不行,那么怎么改。
12:08
哎,对,那这时候你传基本数据型不行了,是不是得传这个引用的了,T把它呢,哎,我先CTRLC一下啊,再注释一下,哎,咱们写一个正确的。对正确的交换数组中指定两个元素的值,我们在这个位置呢,把我们的因特型的数组呢引进来。后边一个I一个接,这个I和阶不是你要换的数,是对应的索引。啊,I和接索引位置啊,所以这块呢,应该是AI位置的元素。哎,后边呢,是AR阶位置的元素。
13:00
储位保存一下,这就可以了。这是这两个索引位置啊,索引位置这样去改,这样改完以后,咱们在这呢调用一下。我们把这个A2放进来,咱们想交换的呢,是J和J加一这个位置上的值。这样来写的。哎,这个写完以后,咱们回到这儿测试。嗯,这呢,咱们这个sot方法里边就是用的咱们刚写的这个结构了啊好,我们执行。你看。哎,没换成是吧,保存。没法。换成是吧,这是这个这这个。Swap a。结合G加一。
14:00
A,啊,又整错了。这样写不行是吧。看看。我这写的是,诶,我这写的是J的J加一是吧。哎,应该是对的啊。嗯,看哪出问题了。这是我们传递过来的,这个数组传递过来,然后这是它的两个位置。把这两个位置换了啊,我这个看出来了是吧,换过去又换回来了,整紧张了是吧?嗯,过来再跑一下。虚惊一场啊,哎,换过去就换回来了是吧?哎,这面就换成了啊,这个写的是对的啊,我一看我说这应该是对的啊,没问题,哎,那这个写法呢,是正确的。
15:03
就是这样子来做。嗯,实际上呢,归结出来的知识点呢,大家一开始呢,其实就懂,只是呢,现在我们把它呢,换到一个行参的一个角度上,这个时候呢,别懵了,规律呢还是那个规律,只是说呢,你需要适应一下。嗯,咱们昨天呢,讲这个练习四的时候啊,这不是里边呢,你看我们这不是放的也都是一些,嗯,最后咱不是封装到几个方法里面吗?这几个方法的话呢,这不也都是型材。啊行,那咱们当时钓的时候呢,你钓的其实也挺嗨的。但是当然你也没有考虑说怎么个传怎么着出错呀啥的是吧,那你这个引用类型的传的就是地址,他传的就是你这个实际的数据值,所以呢,诶你用的其实也挺方便的,也挺习惯啊,只是说呢,我们这里边呢,通过几个稍微难的问题呢,给你搅和了,搅和搅和了你晕了是吧,这时候需要你稍微沉淀一下,这时候沉淀完以后呢,那就真清楚了。
16:00
那以后的话呢,就别出问题啊。
我来说两句