00:00
呃,这呢是咱们说的这个事儿,就是通过这个自变量的方式和这个new的方式呢来造对象,哎这个呢,它有这个区别,哎经常呢,这个题目呢,在笔试当中给你考察哎这样的情况,然后这个呢,也是常来考的一个问题啊,然后咱们接着呢再说,哎另外一个事,这个是什么呢?就是第一种方式呢,叫自变量的方式去定义,呃,就是像类似于这种不是非new,呃不是new的这种方式了啊实际上呢,具体要细分的话呢,这里边还是有点区别的。什么区别呢?咱们来说这个问题不是new的方式,也有这个具体的一些区别。test的一个三。好怎么着呢,你看我现在呢,这个string一个S1这个呢,我叫Java吧。然后呢,我在string的一个S2,这个呢,我就哎学大数据的同学呢,要学这个喊度跑,这呢是两个字串,接下来我这个string一个S3,你看这个咱们没有原来讲过这个事儿,你看你能不能这个做对啊这个S3的话呢,我叫Java EE,然后呢叫这个H,我也写成大写吧啊小写吧,叫喊do,这是它接着呢string的S4S呢,我叫什么呢?我叫Java EE,加上一个and Du。
01:30
好,嗯,再接着string,这个S5等于,等于谁呢?S1加上一个喊do string s6等于。Java EE加上一个SSR。行,先这么着一下,此时我去比较,嗯,这个一二就不用比了啊,主要看3456 S3等等于S4,这是一个。
02:12
S3和这个S5。S3和S6。嗯,然后呢,这个五和六。其实还有其他一些,这个呢,我就列几个比较典型的就行了,好看这几个有没有谁比较有自信,说我这个都能说对,哎,第一个这个等等,咱们用的都是看地址了啊,这个用ES就没啥意思了,那就肯定全是出啊,看地址三个字bos啊出啊就俩结果,反正是吧啊确定吗?确定那就对了啊,这是一个处,三个四是个处,那三个五呢,这是是自信还是梦啊,这是false,那么这个三跟六呢?False,五跟六呢,False其实还可以写一个。
03:27
S7S1加上S2,哎,那这个S先来个S3吧,等等于S7这个咱们给他往这放吧,就放一起这个呢,哎,这个也是false。那五六,那么再来一个五七,这个呢,这也是false,当然这六期的话呢,也是for。
04:06
哎,都是false,这个呢肯定就晕了啊哎,这个呢,咱们先跑一下看这个结果是不是刚才说的这样一些啊,确实是啊,这个因为我都知道是吧啊这都是false啊这个呢是个true,那我们呢,就把这几个结果呢得总结一下,说到底这个呃不同的这种方式写的,虽然说我们去c out话,呃三到七结果呢都是大一很loop,那么他们在内存当中到底是长什么样子,到底应该怎么去理解这个过程啊这个呢需要大家掌握这个呃像这道问题哈,我就可以原封不动的把它呢做一道笔试题去考你啊这个呢,你要答不出来的话呢,诶它就说明你对这个字符串啊底层底层的一个理解不熟悉,字符串大家都会用,是人都会用,但是呢,底层是不是人都了解,不一定。啊,那你这块呢,就可以跟别人呢,就一下子就凸显出来这个区别了,就啊那么怎么去理解这个过程呢?哎,我们说这样一个结论,大家呢就知道了,结论什么呢?像我们这里边这S3和S4这呢相当于是一个字面量,就直接呢这种方式啊,这叫个字面量,这呢看成是两个字面量的一个连接啊,像S3和S4这样属于字面量的连接的这种方式呢,咱们呢,像这个就相当于它就是一个它。
05:27
所以说呢,这俩内容就看成是一样了,所以我们还是在常量池当中,哎去声明,因为你俩就一样了,所以哎就一份,诶进而的话呢,这就是个处,那么对于这种S5S6S7,只要呢,你会发现右边赋值的时候呢,我有其他的变量名参与了。那S3S2这这是不是都有变量名参与的呀,不是这种直接自变量的方式啊,通过这种变量名只要参与了,我们说此时它呢都不是在常量池了,因为常量池咱们说要存相同那种只能有一份啊,像这种呢,不是在常量池,而它呢,需要在堆空间当中去开辟,有点类似于new。
06:13
不能叫有点类似运动,其实就相当于是拗了,哎,拗的时候呢,看一下你具体这个内容啊,是张一这个长度啊,那我就呃这个这个相当于是以S5为例啊,换一个红色吧,以S5为例。这呢叫S5啊,S5的话呢,S1加上一个含度,这是相当于咱们在这呢,就得给他去扭一个对象。那new这个对象,然后把这个地址值堆空间中的地值就给了他了,哎,然后呢,我叫呃,S1加上喊luop,这个S1呢是叫张二一加喊luop,本质上的这个数据是不是又得在这啊,哎,这里边这个Y6呢,你再指过来啊,那现在呢,我们S5存储的是你堆的这个地址值。啊,这个呢是S5,那S6S7只要你有变量参与的都相当于是new,既然是new,那就都得去心造,那记录呢,是你堆的这个地值,所以呢,大家都不一样啊,理解吧,哎,我们把这个事儿呢,就总结一下啊,那其实呢,我在这个位置,在这个位置呢就说了啊,就是呃,属于我们右边这种自变量,就相当于是常量啊,说常量与常量的这种拼接或者叫连接,它的结果呢还是在常量池当中的,哎,并且常量池当中那会也说了,不会存在相同内容的这个常量的啊,那么只要其中有一个是变量,那么结果呢,就会在堆当中啊,这是咱们刚才说的这两个结论啊,这呢是一个结论。
07:42
嗯,这个呢,需要大家记住它这两条结论呢,来指导大家回头呢去做这个判断,哎,这来一个句号啊,哎去做这个判断,像我上面呢写的这个图,大家也应该去理解,S1HELLO s2word s3hello加word。
08:02
长城十里边的,然后S4是S1加上一个这个hello word s是这样写的,这个我把这个内容就写到这了啊,其实就知道是在对空间去开辟的,其实它还得往这块去引是吧?啊,这个是S5也同样的道理啊,这是在对空间,对空间当中去开辟的啊,实际内容呢,我们也也往这块去引啊,这个你主要是看这个S4跟五季录的地址呢,是堆空间中这个地址啊好先明确一下这样的结论,这个明确以后,我现在呢再去加一个东西。加的这个东西呢,我叫S8,我可以从这个567当中随便挑一个,不妨呢,我叫S5,有一个方法呢,叫做这是string当中的一个方法,那有了这个方法以后,接下来咱们知道三跟四呢,它其实是一个了啊,那我就拿着这个三为代表拿四一样,它俩一样啊,哎为代表我去比较一下它跟这个S8。
09:02
哎,是true还是false,哎一直行发现呢,此时就变成一个处了处那就意味着它俩地址一样,S3呢,我们又没有做任何变化,那就相当于是我这个方法,这个方法呢有个返回值,返回值呢叫S8,这个S8在哪呢?诶此时的我们这个返回得到的。这个S8它就应该是在我们的常量池当中声明的这个了啊,返回值得到的S8啊,是使用的这个常量池中啊已经存在的这个,哎JAVA1哎喊杜op,哎,这个数据那你已经存在了,我们就把这个现有的这个地址呢就给你了,而这个地址不就是我们三跟四的这个地址吗。哎,所以说呢,它就是一个处通过这呢,我们来说明下这个所谓的叫int这个方法,嗯,In inter是我们字符串当中的一个方法,我们通过字符串的一个对象调in inter方法的时候。
10:11
哎,我们呢,就会将就,不管你原来你这个是是在啊堆啊还是在哪啊,总之只要你掉了一个方法,我们这个返回值是不是就一定会去强制要求它的这个内容是要去常量池里边去声明啊。对吧,比如说这个五,这个五的话呢,咱们不是刚才说呢,这是这个啊占这个S5,然后呢,这种方式567都是在堆里边去造了个对象啊,然后呢,哎,他比如叫叫什么内容是吧,然后呢,我们调音的方法的时候呢,就会,哎你这个内容什么呢?我们就相当于是强制要求你这时候呢,调音的方法返回的这个值一定要在常量池里边去声明。啊,范围值我们叫了S8了,这个S8呢,一定是用的是常量池里边这个地值。啊是这样子的啊,所以呢,我们这时候会导致三跟八是处,那六七是一样的啊,我就不再倾斜,我就在原有的这个基础上,我把它改成是个六啊,哎,这个呢,都是出。
11:15
哎,都是出啊,就相当于是我这里边的这个结论说如果拼接的这个结果啊,拼接以后还是说你是new以后怎么样的,呃,都可以,总之呢,我就是调一个字符串的int方法,这个返回值呢,我们要去常量池中去找啊,所以这个六啊,我这呢是让他俩呢做了一个in inter,所以呢,你就去这里边去找,那么我们这个S6它保存的呢,是我们这个的地址。啊,那就跟我们这S3的地址呢,就一样了。啊,就是这个意思。哎,CTRLC一下。好,那么这样的话呢,咱们就把这个string,它这个内存里边的这样的一个特点呢,就基本上就都说清楚了,凡是涉及到关于string,不管是笔试也好,还是面试的时候,他当面问你也好,各种各样的这种拼接呀啊,造对象啊,问你等等啊,这些变化呢,大家就应该都不惧了啊,只要涉及到这块内容,你就都应该呢能够给他做对。
12:18
啊,这就OK了啊。
我来说两句