00:00
诶,下边的话呢,我们来看一看,叫string实例化的两种方式啊,这个呢,咱们前面呢,其实也都见过了,这个第一种方式就我们说的自变量的方式。你看也是我们这样写的,比如STRING1啊,我们就直接写个hello,这呢就是自变量的方式的,然后第二种方式。啊,这个方式呢,就是它呢,作为一个对象啊,作为一个类类型的对象,我们需要呢,去new哎这样的一个方式,这里边的话,我们仍然呢,可以使用其中的一个构造器,放一个字串分面料啊就是这样写的,这个呢就是我们此类的实例化的两种方式。OK,那么这两种方式的话呢,我们简单的来体会一下啊。我再去新新一个。一个单一。诶,单元测试过来。第一个啊。好,这块呢,我们先简单的做一个比较啊,比如说这个S1呢,我们叫做hello。这块呢,我们再复制一份,这个呢叫S2。
01:00
然后接着的话呢,我们再来一个string s3我们去new一个string。这里边儿呢,还是hello。啊,这个场景,然后呢,我们把它呢,去复制一份叫S4。没问题了,下边的话呢,我们去比较一下,这里边儿呢,几个变量它们的等等关系,首先S1呢跟S2呢去等等,这个呢应该是。处咱们已经说过了是吧,那么S1呢,跟我们这个S3呢。其实咱没有讲啊,没有讲这块呢,其实呢是个false,咱就先说了啊,那么S1呢跟S4呢。对这呢也是一个false,哎,咱们讲过的呢,其实应该是三跟四呢比较熟悉是吧。他呢,显然是false。对没问题,那我们这儿呢,是用的等等来进行判断的,DG呢,就是他们的地址呢,这个凡是写false的地址都不一样。啊,那如果要用equals来进行判断呢。啊,这个呢,就。
02:00
咱们就啊,不一定了。我刚我刚才说呢,咱们就拿一个举例来说了,He呢,就是这块所有同学都不应该出问题是吧。就别不一定了啊,是不是全是出吗。对,这个实打实比的不就是内容了吗?啊,那都是哈,是吧,所以说大家呢都是true,就这个比呢,咱们当初也看过这个源码,不就是一个字符一个字符的去比嘛,一旦呢出现不一样了,那就是false了,所以呢,就是一个一个的啊H一样啊E一样,L一样是吧,就这样比的啊。好,所以这块呢,我就拿着一个来说了,其他的我就不写了,全是处啊,写多了这个感觉都侮辱大家了是吧。哎,咱们呢,主要就看上面这块了,上面这块就提到了,有一些场景呢,它是不一样的,那这里边儿呢,其实我们想说的一个问题呢,就是它哈,这个string呢叫S。加S吧,我new一个string。这个里边咱们写了一个。啊,那这呢,就涉及到这样的一种格式,他在内存当中是如何分配空间的。
03:02
那因为呢,这种格式呢,咱们刚才已经说过了啊,直接呢,就在这个自串常量池当中,我们有一个hello,把这个地址呢,给了S1或者是给了S2了,那这种方式呢,这块我们涉及到它呢,内存解析是什么样子的?啊,它的一个内存解析,那那平时的话呢,有时候也会面对这样的一个问题,他会问呢,说这样的一种格式,在内存当中创建了几个对象啊。这呢是一种问题啊,或者呢,他就会问成说呢这个结构啊。在内存当中创建了几个对象。啊,这个呢,感觉有点摸不着头脑了,说这不就一个对象吗?是吧,诶这块呢,就涉及到了我们string呢,它比较特别了啊,然后呢,我们回过来,然后看我们对应的这个课件啊,这个课件下边呢,我们这有一个这样的一个关系哈。好在没方法里边呢,我们一进来这个呢,我们就有个战争呢,这是我们的may方法。
04:04
啊,没方法过来了,首先呢,我们这儿呢,有个叫SSE啊,这个SSE呢,我们叫做hello,诶写这儿了SSE是吧,然后SSE的话呢,它对应的叫hello,这个hello的话呢,我们说呢,在42长岭当中。啊,这块呢,我们给他先整一块这个空间。咱们用它来表示啊,哎,这呢,我们叫hello。哎,我在这写啊。哈啊。然后呢,这块有一个对应的一个地址。啊,这个地址我们这样指一下。啊,这块我们把它呢,给它赋一个值,比如说这1122。啊,变小一点啊,然后把这个地址呢,给了我们的X1啊0X叫11R。哎,然后呢,C呢,就指向他了。呃,其实这块呢,我们要细细究的话呢,我这块写的其实也不够精确啊。什么意思啊?诶,我这儿呢,你看这个红色的话呢,我称为呢,是死盾形的一个,其实也算是个对象了是吧。
05:03
呃,这个对象的话呢,其实还是个死类型的哈,我把这个哈呢就直接写这儿了。哎,其实严格上来讲啊。怎么着啊?严格上来讲,咱们说了这个string呢,你存的这个h helo,它应该是在一个数组里面是吧。诶,所以说我严格上放的话呢,按说呢,应该是得这么着了,哈哈呢,实际上这是一个数组,然后这里边儿呢,咱们其实放了一个叫Y6。一个产品量是吧。就这里边是个数组,然后数组指向它的。理解这意思吧,诶应该是这样的,但是我这块呢,就把这个事呢,稍微的给他优化了一下,就给放到这儿了。啊,这个稍微的注意一下这个事儿啊呃,因为呢,这里边儿我们在提供这个S2的时候呢,就会有这样的一个呃,小的细节的问题了啊。咱们先整啊,这个S2的话呢,首先我们看到是new嘛。那既然是new的,我们就需要呢去创建一个对象了,那new的方式呢,都在这个堆里边了,那这当然了,这个自串常量池呢,在这个七以后呢,也在堆里啊,我只单独的给它拿出来,这是专门的是其中的朝阳池的位置,这个呢是专门这个堆的位置了。
06:08
行,那此时呢,我们就需要呢,去给他new一个对象。OK啊,那么你了一个对象,这个对象呢,也会有地质值。这个我们再给他一个地址。这个呢,我们叫这个3344啊。3344好,那么这个地址呢,就给了我们这个叫S2了啊,0X这个叫3344啊,那么我们这个。啊,变量这不就指向他了吗。没完事儿啊,那么我们这是new的一个对象了,呃,那这个对象里边是不是也应该放个hello啊?所以这块就涉及到这个hello,这到底怎么放的问题了,诶所以这块呢,要是我们简单来说的话呢,你就这样整个hello了。但是这块呢,要细来讲的话呢,那就不能这么着来了啊,诶,那应该这块呢,我们其实涉及到一个点,就是你里边呢,其实声明的是一个Y6型的一个。
07:00
是不是一个属性啊。诶,这个咱们冒号一下啊,把这个稍微的整小一点。这呢是一个Y型的一个属性,然后那个属性的话呢,它也是一个类型的,它应该指向一个地是吧。啊,其实要细说的话呢,它这块呢,我们说为什么讲说如果没有这一行代码的时候呢,这一行代码说创建几个对象呢,其实应该一般说呢,就是两个对象哈,哎,怎么叫两个对象呢?哎,一方面呢,我们在堆里边扭了个对象。然后呢,这个Y要指向一个位置,那指向哪呢?这个时候我们需要呢,在常量池里边呢,也给它呢,去提供一个string,这个string的时候,你看我这写着hello,刚才我说的这个详细的细节呢,应该是这样子的,这个hello呢,其实也应该出来。然后它里边呢,其实也放的是一个Y。啊,然后这个哈的话呢,其实还有一个地址呢,是吧。啊,这一说呢,这个注意一下,咱们前面呢讲实际上是做了一个优化啊,便于大家呢去理解了,这个呢,比如说叫0ns叫AA了。
08:00
哎,这个。整一个汉字的吧。啊,0X这个5566。行,然后呢,我们这个value呢,它其实就记住了这个0X5566。哎,这是一个它,然后这个呢,也是啊0X。5566。这么着啊,那相对应的话呢,我们这两个指针呢,这不就也都指向它了吗。啊,这个啊。哎,这么着指向一下,就是严格上来讲的话呢,其实是这样的一个结构。啊,这个也是合理的哈,诶你相当于我们这块呢,你是字符串嘛,字符串里边有个属性叫VALUE6了,诶VALUE6呢,这个值呢,是存储你核心的这个数据了,叫hello嘛,这呢是个数组,所以呢,我们这还是一个引用这样的方式,前面呢,我们在讲的时候呢,实际上是诶简化了一下,你把它拿出来啊,这呢是一个地址,就这个意思啊。那么如果我们单独的要说这一行代码,说它创建了几个对象呢?我们说是两个,哪两个呢?一个呢是我们这个占这个堆空间里边,我们首先要new一个对象。
09:07
这是一个对象啦,然后另外的话呢,呃,因为这个字符串常量池呢,这个字符串呢比较特别,我们在new的同时呢,我还要呢,往字符串常量池里边放一个这个自变量。哎,也是我们类似于上面这个场景啊,我呢要往这放一个,哎,这呢就也放了一个,所以呢,两个对象,一个是他。一个是他。啊,这两个对象了,在这两个对象呢,它其实本质上来讲呢,呃,它里边的这个Y6的属性呢,都指向的是同一个差型的数组,里边呢,这块呢,保留的这个地址都给了我们这个Y6型的这个数组了,但是外边来看的话呢,这个地址和这个地址注意是不一样的。啊,体会一下这个事儿。这俩不一样,诶,那回归到我们这个啊,说明这个层面来看的话呢,当我们去比较说S1和S3S4啊,他们的地址的时候,哎,注意都是不同的,比如说S1跟S3就类似于我们这里边儿的一个呢是3344,一个呢是1122。
10:08
你看地址不一样。啊OK,注意什么一样呢,就是他们里边这个Y6的这个属性的这个地址是一样的啊,当然这个Y6的这个属性呢,咱们诶上节课呢也讲到了,他在声明的时候呢,你看已经private了是吧。相当于对外呢,就根本呢,没有给我们暴露。所以大家呢,你也不用去关注这么细的啊,说这俩地址呢,是一样的,不用关注了,我们只看外边的这个地址。哎,你注意什么时候一样,什么时候不一样就可以了,好,那么回过来,哎,在我们这个说明的位置,哎往下走,哎这块就提到了,说这呢,在内存中创建了几个对象呢,哎,我们就提到了是有两个是吧。好哪两个呢?啊,一个呢,是啊,堆空间中啊,我们new的。对象。啊,另一个。
11:00
呃,另一个呢,是在哎字符转二常量池中。哎足串哎常量池中啊,我们呢,相当于呢,就是哎生成的这个字面量。诶,这个呢叫hello,哎,就是这儿呢算是有两个对象,当然呢,可能有同学会说,那像我们刚才举的这个例子上来呢,就有一个hello了啊,其实呢,就已经有我们这个场景了,那你再要去new的话呢,其实呢,按说呢只需要new一个了,因为这个提前已经都造好了,是吧。对啊,那这个呢,就算是一个了,但是呢,咱们一般要问的时候呢,通常就不考虑他提前已经有这个事儿了啊,直接问就相当于是诶有两。哎,注意这个问题就行。这块的话呢,大家需要稍微的哎,注意一下这个场景,这个完了以后呢,我下边又放了个图,诶这个的话呢,大家看看是不是清楚,哎,我呢直接呢在代码上面,咱们先做一个。这个说明啊,是这样子的。哎,我在这块啊,现在呢,我们说明一个class,这个呢叫person。
12:03
哎,我们使用呢,其实就是一个string的这种不可变形啊,这呢我有string形的一个name。啊,提供一个构造器,嗯,我就别提供构造器了,直接我们就来操作得了啊。好,这块我们有个单元测试方法,这个我们叫二啊。哎,这么着啊,现在这个person这个P1,哎,我们就用一个person了。然后呢,我们再看person一个P2,我再去一个person没问题,P1的话呢,这个name呢,我们叫Tom。P2的这个name呢,也叫Tom。想象一下目前呢,是什么样的一个场景,然后接下来的话呢,诶,我把这个P的这个name呢,我改成叫Jerry。然后问C2的name是谁,是多少。诶,不是Jerry吗?Tom还是Jerry啊?嗯,我这儿啊。
13:00
P写P2应该是是吧。啊,这块的话呢,它这个结果应该还是M是吧。诶,这个呢,要注意一下这个问题啊,诶就是呢,可能我们没有讲string,大家呢挺清楚的,说这个内的话呢,这不应该各自一份。啊,首先呢,你修改其中的一个不会影响另一个,这是咱们原来讲的这个知识点,现在来看的话呢,其实我们在内存当中,他俩指向的是同一个。位置是吧。啊,那回到我们这个图形这块来看啊,我们来画一画这个事儿啊,首先呢,这块一个main方法进来。哎,这么着。诶进来以后呢,这块我们有一个这个叫AP,诶我们拗了一个对象。哎,这个呢,就在这个堆里边了啊。我往这儿放一下啊。行,然后这个对象呢,有一个属性叫name。嗯,好,这个name的话呢,我们是使用这种自变量的方式呢,给大家做的赋值,那自然而然的应该在字符串常量池当中去提供了,所以这个常量池里边呢,我还是就这样简单去处理了啊。
14:07
这块呢,其实还是得先是一个租串儿。它呢有一个地址,就是我要是简单来画的话呢,是这样子的啊来你注意看。我这儿呢,先写成叫0X叫1122啊。诶,这个地址,然后把这个地址呢,是不是给了这个name了。0S1122。稍微的长一点啊。诶,然后呢,诶这个上边的这个指针呢,这不就指向了我们这个吗。啊,我要泛泛的一写的话呢,就要我们上节课呢,咱们讲这个事儿,我要泛泛的一写,其实我就把汤姆就写这儿了。其实准确来讲的话呢,是你这个词针里边呢,有一个属性是吧。这个属性叫Y6啊,咱们要详细的说的话呢,那就得是就得这么着了啊,然后呢,实打实的你这块呢,实际上是有一个差型的一个数组。
15:01
这个数组呢,就是Tom嘛,是吧。诶,然后这时候呢,你是。把这个地址呢,给了这个Y6是吧。哎,详细来说的话呢,是这样一个场景啊,然后呢,你这个new person的话呢,有一个地址。就是这个地址。啊,各种地址。这呢负一个值,哎,0S比3344。行,然后把这个地址呢,给了我们这个P。三三十四。那这时候我们这个P呢,就指向了我们堆空间中的这样的一个试题了。这是第一种场景,然后呢,接下来我们又用了一个这个P2啊。P2这块。哎,你得先创建一个对象啊,这块我们还得是这么着一下是吧。这块呢,也会有个地址。诶,这个得。慢点来啊,这个有一个小的这个。不行了。
16:00
哎,这么着啊,这个呢,我们给大家换一个,比如说5566。5566,好,那么这个五六呢,就给了我们这个P2了啊,0X叫5566。诶,那么这个时候呢,我们当前的它呢,就指向了这个东西了是吧。这个线呢,稍微有点绕啊,这像这儿了,然后这个内的话呢,它是不是也指向我们下边的这个结构了。也是122是吧。诶,它也指向它,哎,这时候呢,其实我们要放慢的说呢,你把这个Tom就直接放这就得了啊哎,所以呢,暂且的话呢,我们看到它俩呢,其实在内存当中是用了同一个Tom。哎,就是我们以前呢,画这个内存图的时候呢,当时我不是说过吗?咱们都画简图了哈,当时我们说这有个P1指向这块一个对象啊,Tom呢就放这儿了啊,这有个P2啊,指向一个新的一个对象,这里边有一个Tom说呢,每个对象呢都有一份这个实例,所以你改这个不影响这个,就当时我们画的时候说了,说咱们就先画一个草图是吧,简略的图,其实Tom呢不是在这放的。它毕竟是一个引用数据类型嘛,所以放的就是个地址值,哎,这个地址指向的是什么呢?这个是个自变量了,所以就放在常量池里了。
17:07
放在长远池里,长远池呢,其实详细来讲呢,还得是这样画啊。哎,范范要画的话呢,我就放到这儿了。啊OK啊,详细的话就是这样的场景。好,那么接下来我们通过这个P1呢调离name p1呢调离name,现在你要把它改成Jerry,哎,相当于。我现在呢,要是画这个详细的图呢,是不是得把这个整一份是吧。整一份。好,这个往上走一走啊,这时候呢,它有一个Y6。跑到这他们这儿。然后这个我们再复制一份,这个呢叫Jerry了。诶,然后此时的这个Y轴呢,指向的就是它了。他的这个地址呢,这不就是一个新的地址了。啊,7788。
18:00
啊,这个地址好,嗯,然后的话呢,我们是P1的这个啊,P1的这个name啊,这个呢,你就把这个112呢,就改成叫7788了。哎,把他干掉。哎,把这地把这地址过来。哎,这个删一下好,那么此时的话呢,我们这个7788呢,这不就指向了是这个结构了。这个线稍微有点多。啊,有点这个绕了啊,把这个呢给它删掉。不要了。啊,稍微的有点绕哈,有点绕。行,那么目前的话呢,我如果我们如果通过这个P2呢,再去调人家这个name,人家这块指向的还是这个Tom。不受影响。啊,那么为什么要这样设计呢?其实就是为了节省内存空间嘛。啊,大家你想想啊,这样的一个设计者的思想就是呢,当我们,哎,不同的这个属性的值是相同的时候呢,我们就在啊自误差常量池里边,让你共用同一个。
19:06
那为什么我们这个string呢,要有不可变性呢?啊,就是我们看到的呢,像是各自一个。但实际上呢,我让你呢,用的是同一个,假如你这块有1000个,那1000个用的其实都是一个。啊,然后呢,只要你想通其中的一个呢,想去改的话呢,你自己呢,你想改不要在这改。因为你一改的话呢,所有不都跟着你变了吗?你要改的话,你自己先去造一个。然后其他这些呢,要不改,那就还用这一个。啊,这不就极大的节省了内存空间,那对于我们平常使用者来讲呢,其实你感受不到呢,它底层用的是统一个。你只需要知道呢,就是它每一个呢都有个值,其中一个改了不会影响其他的改。其他呢,是多少还是多少。啊,也就是说呢,我们想让它共用,体现了节省空间,那在这个基础上呢,我们得再配个特性,就叫做不可变性。
20:00
使得的话呢,谁想改谁就自己出去再重造,不要影响我们现有的这些对象使用当前这个结果。啊,这个就是他的一个思想啊。好这呢,我们就把这个图呢,给大家画了画,大家呢,稍微的去体会一下啊,这里边儿关于这个实例化的这样的一个情况啊。好,那么这个事儿呢,我们就告一段落了啊,下来呢,大家也可以自己的稍微画一画,下边的话呢,我们说一个string的一个操作哈,这个操作呢,我们前面也经常做,就是这个拼接的操作,或者叫连接的操作啊,这个呢,主要应对的场景是什么呢?就是经常会有这个笔试面人琴呢,会去考察,另外一个方面呢,我们在开发当中啊,确实也经常的去写,那这时候我们稍微的关注一下,诶,到底这种不同的写法呢,在底层来看呢,是不是同一个对象。啊,这样的问题,好,那我们就呢来看一下我们这个代码了。这个是TEST2啊,咱们接着来看,这个叫TEST3啊。这块的话呢,我们来说明一下啊,就是这里边儿这个拼接的这种操作了啊,针对的是不同的这种场景的。
21:02
回过来啊。啊,这个我在这说明一下,哎,测试哎,String的这个。这个连接符啊,就我们这个加号啊。好,首先这块呢,我整两个字符串啊SSE这个呢叫hello。整一个S2,这个咱们就叫做word吧。诶,以它两个为基准啊,然后下边S3。我那叫hello word。诶,写错了啊。哎,这是一个啊,然后呢,我再写一个的S4,我叫hello,新接上一个word。我再写一个S5。叫一啊,连接上一个word。哎,基本上你也知道要怎么写了。点击个S2是吧。那个S7。S1拼接上一个S2,哎,这样个场景是吧。
22:03
好,我呢就先写这样的几种情况,那么这几种情况写完以后呢,两两之间都做等等的判断。Equals为啥就不写了呢?一口起的话呢,就有点侮辱大家了是吧,诶咱就不一Co了啊,针对这里边这个34567,咱们呢,用这种等等去做相关的判断啊,这呢我只列其中的几个代表性的。清楚以后呢,其他的也就同样的就都清楚了。我就先。复制啊。三跟四,三跟五。三个六。啊,三跟七。然后呢,这个呃,五跟六。五跟七。这块我们就先这么着了啊。来,咱们先猜一下吧。啊,这个呢。
23:01
接着出啊。啊,反正就俩结果是吧,啊出示完了以后呢,就下一个就放了啊。啊,这个呢。False。这个。完全没感觉,其实是,是吧,这真是蠢萌了哈。这个呢?也放啊这个。Boss。放。把那个给放得了。来看下这个结果啊。还真是蒙对了,哎,就是这样一个情况啊,哎,这个呢,就是我们看到第一个呢,是处其他的场景全是false,是false就意味着地址是不一样的。没问题是吧,好,那这里边儿我们就要看一下了啊,刚才呢,我已经运行完了,其实这个运行完以后呢,诶关于三跟四是不是一样呢,这个事儿其实我们可以简单的看一下自己码文件啊。这个咱们是在这儿。
24:00
这个这里边的。啊,这个是吧。咱们看的是三啊,大家你看。这呢,我们是看到这个字面文件呢,在idea当中,我们一击呢,它就自动的进行了一个反编译啊,反编译完以后的话,你看这个三个四。是不是就完全跟你写成一样了是吧。那也就是说呢,在这个自解码文件当中哈,实际上呢,它就已经给我们做了一个合并了。咱们看到的是两个不同的字变量,其实呢,在边以后呢,这俩就是一个。对啊,他俩就是一个,哎,那么他俩呢,既然是都是hello word呢,自然而然他俩就是处了啊。这呢可以列成是两个常量啊。常量做这个拼接,跟我们直接在写这个常量呢没区别。那下边的话呢,567咱们其实都是有变量参与的。那么变量参与这块呢?该如何去实现呢?啊,其实这个事儿呢,我在前面呢,讲这个问题的时候呢,已经把它给说了。
25:00
哎,在这儿你看。哎,我在这块已经说了,这不这只不过写成加等于了哈,不就相当于S2呢,就等于S2呢,再加上一个自变量吗。你看我当时咋画的呢?我说呀,说新造了一个对象是吧。对,其实就是这个场景啊,也就是说呢,我们这种结构,它其实相当于是底层给我们new了一个对象。啊,这个对象这儿呢,是我们看到的这个代码,然后呢,我们看这个view这块呢,有一个资金码指令。哎,我们打开现在针对是这个三的这个方法的这个扣的,哎,我们在这儿呢,简单的看一下。诶,过来啊。诶,但是你看在看这个词解码指令的时候呢,同样能够发现我们这样的一个场景。这个呢是咱们的第一个hello是吧,这个呢是我们第二个这个word s3的话呢,这不就hello word这是一个字串常量的意思啊,然后呢,你这个呢,是不是也是长这样啊。所以他俩呢,长得是一样的是吧。OK啊好,下边这种场景的话呢,诶大家要看的话呢,这块其实看到的东西呢,比我们想的呢要多一些啊,这个其实它底层怎么做的呢,我就简单说一下啊,因为你已经看到了,这叫builder了。
26:14
呃,这个哥们儿呢,他其实呢,就是借用一下,他帮我们把谁呀,先把这个。嗯,先把这个啊,我们看这这呢,相当于是open喷的这个操作啊,先把这个呃,S1的这个第一个这个变量拿过来,这其实是这个变量的意思啊,这个变量谁呢,其实就我们上面S1。就你吧。先把这个hello呢,这个变量拿过来,然后呢,他做了一个拼接的操作,然后呢,接着又把你这个word拿过来,再去做一个拼接的操作啊,这块大家可能不太熟,我就快速的过一下啊,总之的话呢,就是把这hello和word这个数据呢,放到了你这个string build这个内部的一个数据当中呢,最后呢,结果呢,他调了一个图论的方法,这个方法返回了一个字串给了这个S5了。中间这些细节呢,都过滤掉你就知道呢,我们调用一下这个string b string build的一个叫to string是吧。
27:08
有点绕啊好,然后呢,咱们就看一眼它啊,CTRLN。啊,所以大家呢,你要想把这个东西呢,弄得清楚点,自己把文件呢。哎,是你的一个内功是吧。人啊。好,Ctrl n string build呢,我们就看这1.8进来,然后呢,我们CTRL f12,咱们就看to string呗。这个初始率的话呢,看到了。是不是给扭了一下啊?诶,所以呢,回过来,诶为什么我们说这块呢,实际上呢,就我们新new了个对象呢,就是因为我们看到它底层的源码。啊,这个我们在这说一下啊,说呢通过查看。呃,字节码。呃,文件是吧,诶发现呢。哎,发现怎么着呢,要调用了。哎,这呢,我就这样一写,大家你就大家就不用费得去看了啊,你知道这个事儿就行,第二呢,String builder的叫to string方法是吧,而这个to string方法中呢,它其实是一个new的行为。
28:10
啊,那就意味着我们这块返回来其实new的一个对象了,既然是new的,它是new的,它是new的,它是new的,这不就是三个新的对象嘛,所以他们之间呢,去比的话,肯定是不一样的啊这样呢,我们上边这个呢,是多然常量池力的,常量池力的跟你这个堆空间里面用的对象,显然呢,是不是也不是一个呀。所以呢,下边这块呢,就全是false了呗。哎,这个看能不能行。哎,体会一下啊,我们这样的一个过程。这个呢,就是在笔试题当中啊,有时候呢,会出现这样的这个场景啊。嗯,这个完了以后呢,哎,我再说一下这个事儿啊。就接着他来说吧。S5也好,六也好,七也好,这都是三个的对象,我随便呢挑一个,就拿五来说吧,然后呢,我去一个方法,这个方法的话呢,叫做方法。
29:01
啊,这个方法大家可能之前没见过哈,就是一个证方法,调用这个方法以后呢,它会得到一个新的字符串,我这呢叫S8。那么这时候我们关心的就是这个新的字符串怎么回事儿,我直接呢,做一个比较大家就懂了啊,直接让S3呢,我们去跟S8呢,做一个等等的判断。哎,我们在这儿呢,比如来一个换行是吧,方便咱们去看啊,直接呢走一下。好大看啊,在这个换行的下面,这是不是一个处啊。这个处的话呢,它是跟SS3呢是一个处。哎,你说什么意思啊?对,相当于呢这个方法。哎,咱们调用完以后呢,它返回的是。哎,返回的是。是不是咱们这个苏常量池里边这个字面量的一个地址啊。诶字符串啊,常量池中,诶这个字面量的一个地址啊,那因为我们这个字符串常量池里边已经存在了哈沃了,那常量池里边又不能放多个相同的,所以呢,就把你已有的这个地址呢,就返回给S8了,那三四跟八的地址就都是一样的。
30:16
啊,这呢,就是我们没有见过的这样的一个方法啊,叫做方法。啊,就它了。好,那基于咱们目前这个场景呢,回过来咱们总结一下看看啊,这个连接操作呢,如果是常量加常量。就我们刚才看到这种自灭量的方式啊,这个自灭量呢,本身呢,它就是在常量池里了。啊,那要常量加常量,那这个结果呢,是不是还是在自误差常量之里是吧。啊,结果仍然。哎,存储在啊字符串常量池中。OK,那这个常量加变量,或者变量加常量,或者是变量加变量,它们是一样的,那那。
31:00
啊,这个我们说呢,哎,都会。啊,是不是通过new的方式。这个创建一个新的字串是吧。哎,然后呢,返回哎堆空间中。此字符串对象的地址。啊,这是它了,好,那刚才我们也提到这个叫int方法了,这个in证方法的话呢,不管呢,你是拿哪一个对象呢,调的它呢,返回的就是自十常量池当中,诶这个字面量的一个地值了。哎,就是他。那这块呢,要细说的话呢,就是如果呢,你这个磁化常量池当中这个字面量要是不存在呢。那就创建一个是吧,然后返回,如果要存在呢。就范围一有的呗。这个其实也不用多说了啊,像我们这里边呢,你hard沃呢,如果说在这长池没有,那你就返回,就是放到长池这一份,然后呢,返回这个,诶如果要有了,有了就用现成的,主要基于一个点呢,就是长远池里边不是不能放。
32:03
相同的嘛,是吧。哎,这个就行啊,这个我就不用多说了。这个里边呢,哎,在实际笔试当中呢,可能会考,但是考的话呢,其实可能还会有这样的一种情况。或者说呢,他要没有考这种情况呢,哎,我给你在。再加深一步啊,咱们不就是彼此卷嘛,是吧。咱们就给他们再卷一卷哈。哎,怎么着处理你看这儿啊。我这儿呢,S1S2注意呢,是两个变量。这是俩变量吗?我在他前面呢,加了一个final。先加一个吧。加完一个以后呢,S3跟四呢是一样的,我就不说了啊,我让S3跟S5去比。S3跟S5去比。结果是什么?啊,这个呢,我们走一下。加了,反正呢,有区别了。
33:02
哎,它就变成敞亮了。所以这块我们就相当于看作跟S4呢类似的这个情况了,所以呢,它就是除了。啊,那这时候呢,我们的S3跟S6比呢。还是false是吧,但是他呢,要是加了一个final呢。就也是出了。哎,那进而的话呢,这个呃七呢。哎,那这呢,你前后都是常量了嘛,所以也是出是吧。这种考的场景还比较少,那提前了,咱们就卷一卷别人是吧。这儿呢,也是可能出现的场景啊,诶,所以这块我写的呢,不是说就叫自变量拼接自变量了,我就是写的叫常量加常量,可能是自变量,也可能就是final修饰的常量。啊,我在这写一下这个注啊。哎,说此时的这个常量可能是字面量。
34:03
啊,也可能是final修饰的这个常量。诶,所以说呢,它的这个结果呢,都是足串常量池当中这个自面料啊。啊,结果仍然存储在字符串常量池当中,返回呢,这个再多一句哈,返回此字面量的地值是吧,就可以了。然后呢,这块咱们再选一下是吧。看一下这个啊。这个呢,目前呢还呃没怎么考过是吧。那么大家以后当面试官以后呢,你就可以考一考了是吧。这个contact叫连接的意思啊。哎,它叫连接的意思,这个呢,我们啊还这么着一下吧。啊,比如这个S1,我们这个叫抗啊,连接一下这个S2。就这意思啊,哎,这呢是一种场景,我这呢叫string叫S3啊,这是一个意思,然后呢,你也可以呢,去写成叫hello。
35:03
这呢就相当于是一个常量了呗,然后来一个con,这呢我就写个word。这个相当于有点像这个啊。常量呢,连接常量。这叫string s4。哎,我再就写一个吧,S5这个你可能是S1,然后呢一下。接下来我写一个word。诶,我就不再写另外一种情况了啊,这里写个hello,然后呢,Con开这写个S号是吧,诶我就不多写了啊,然后这里边儿这个S345彼此之间怎么样。啊,再来一个。啊,这个呢,叫con是吧。哎,这个肯开的话呢,如果大家你看它的源码呢,你会发现它其实都需要去new。啊,既然呢,都是new。那这块呢,全是新返回的new的对象了,所以彼此之间都是false是吧?
36:01
诶,原来的话呢,没觉得说大家对死针这么不了解,讲完以后呢,发现呢,针原来水这么深是吧。好,回过来说一句啊,一个肯开的说呢,不管。哎,是常量,哎,我们说呢,调用此方法啊,还是变量调用。啊,然后呢,这个参数呢,啊说同样是吧。同样啊,不管这个参数啊,因为这个方法呢,咱们这块不是有参数吗。哎,不管这个参数是常量还是变量。啊,还是变量啊,总之。哎,总之这个调用完以后。调用完这个抗开的方法。哎,我们呢是都啊,返回一个新new的这个对象。啊,那既然你是新旧的了,所以说我们再去做等等判断的时候呢,都是false啊。
37:02
好,完事了,那么关于我们这个齿轮的拼接操作呢,我们就说完了。
我来说两句