00:00
行,那么关于咱们说的这个,呃,比较难的这个面试题啊,咱们就讲完了,然后大家呢下来呢,再去体会体会。啊,再去体会体会,呃,那么接下来呢,为了大家更好的去理解这个问题啊,咱们再举两个练习,这两个练习呢,跟我们刚才说的这个呢相近,都是关于这个in,但是呢,也稍微有一点不同,那顺便让大家呢,再去巩固一下关于in inter的这个使用。啊,首先呢,咱们来看这一条练习一的这个问题。好,大家来看一下这个问题,我这呢是new了两个这个string对吧,你有两个string呢,这是得到S跟咱们刚才呢这个,诶面试题当中这块呢,实际上是类似的对吧。啊,就是一开始这样,那这样的操作的话呢,就是我们在底层实际上是扭了个齿钝,就是一个AB,这个不用多解释了,对吧,然后接下来的话呢,我们在这个位置,哎,在这个位置的时候呢,咱们一定要明确,就是此时的哎,字符串常量池哎,或者说在这个上一行代码执行完以后啊,这个字符串常量池中啊并没有。
01:00
哎,是不是我们说这个AB啊。对吧,哎,自大常量池中并没有这个AB,然后接下来呢,就是我们调离in inter,那一调离in inter,因为呢,你没有AB,那下一行这个in inter的时候怎么处理啊,大家就会发现呢,在这个六当中和我们在这个七当中,它这个效果啊就不太一样了。哎,就不太一样了,行,那么在这个六当中,这个情况是什么样的呢?哎,这个咱们来分析啊,在六当中。诶在这个六当中,因为呢,此时的自符串常量池还是在这个永久带,所以呢,嗯,你这块就是实打实的去常量池里边去找,没有确实没有是吧,你上面不也没有过吗?那你插池要没有的话呢,咱们是不是就造一个啊,所以此时的话呢,我们会在这个叫串池中,是不是创建一个,哎,这个咱们也叫一个对象吧,是不是就AB这个字符串,或者就创建一个字符串吧,创建一个字符串就是AB,然后把你字符串长按池中这个AB,实打实的它的地址呢,给了我们这个SR。
02:00
这呢是咱在咱们这个叫S6当中啊,我这呢也画了这个相应的一些图,大家看一下,我们在这个JTK6当中,那么S呢,就是我们对空间究的这个对象常量池里边,我们说没有提供咱们是这样的方式扭的啊。哎,你要是直接拗一个磁针是AB常量池里边是有的是吧,咱们那会儿不也解释了那个两个面试题了吗?这样方式的话呢,在常量尺边并没有这个AB。啊,那么当我们去调这个方法的时候呢,咱们在这个常量池里边就实打实的给造了一个AB,这个地址呢,我叫2233,把这个地址呢,给了我们这个S2,给了这个S2。行,那么这个S呢,它记录的是你对空间当中你用的这个对象的一个地址,那这呢就非象的清晰了,那下边呢,如果让你去判断说S2,这个S2呢跟AB,这个AB呢,不就是常量池,自变量的写法就是常量池了,哎,那它俩呢,肯定是个处嘛。对吧,那下边这个S呢,S跟我们这AB一个是122,一个是2233,这俩肯定不是处啊,所以这就是false,所以在GT6当中是一个是处啊,一个是false,那咱们来看一下这个情况。
03:00
这呢,OK,已经是GP6了是吧。那然后我们再来看一下这个位置。啊,这个练习一啊这呢我也写成6OK,跑一下当前这个程序。你看一个呢是true,一个是false,在这呢,我稍微标识一下。GT6的时候呢,这是出。这个是false对吧?行没问题,然后接下来的话呢,我们看一下在在这个JDK7或者JK8都行,咱们直接呢写个八也可以啊,七跟八是一样的。JDK8当中。那此时的话呢,由于你上边这个串式当中并没有AB,那怎么怎么办呢?我们这里边刚才也讲到这个问题了,它会放一个地址对吧?啊,那在我们这块呢,体现就是在GB8当中,然后串中,呃,首先呢,说是没有创建嗯,这个字符串KB。
04:06
诶,他没有创建这个组串AB,而是呢,哎,是指向。而是看创建哎一个引用是吧,哎指向哎咱们new的这个对象。那换句话说呢,就是我们创建一个引用,引用的地址呢,就是我们这个new string的一个地址。啊,那你把这个地址给了谁啊,这个,而是这个创景引用指向它,然后呢,将此引用返回是吧。哎,将此应用返回,那就意味的话呢,我们,呃,这时候呢,这个S2呢,实际上呢,记录的是不是就是我们这个new string的这个地址啊。哎,它是new string的地址,那S2跟S呢,它俩是一样的,它俩是一样,然后你这个呢,这个咱不是那会说了,你常量池里边没有AB,它就是记录一个引用,那这个AB呢,是不是用的也是我们这个S2啊。
05:01
那就是这个S跟这个诶这个得到这S2呢,跟我们这个呢,它俩永远是一样子的,所以这个呢,实际上它肯定是个处,关键就是我们看这块是吧,所以在我们这个S7或者S8当中,哎,大家看就是这样个效果,俩都是true了是吧?哎怎么来解释呢?这个S呢是我们在这new的,然后这个S2的话,这样一个操作在常量池里边,我们这块呢,没有真正的创建一个AB,而是呢保留这个引用,这个引用呢,就是指向了你这个对空间中的这个AB了,所以S2呢,记录的就是这个122,而S呢记录也是幺二,而你这个里边这个AB呢也是122,它就不再去存这个AB了,为了省空间嘛,所以大家呢全是122。哎,导致呢,我们这个结论呢,不就全都是处吗,大家。啊,所以这块我们再写一下,在JDK这个八当中,那这呢就是出啊,在这呢它也是个出。啊,这就可以了,行,那这个时候呢,咱们把这个再调成一个八。
06:00
嗯,这个应用一下。哎,做一个执行。行,那这个结果呢,是不是就全是出了没问题是吧?行,那咱们刚才那会儿呢,是说了一个什么问题呢,就是说呃,在我们调这个int之前啊,这个这个事已经说完了啊,说完以后的话呢,大家你再看这。如果我在这个上面呢?我写了一个string X,它叫AB。是吧,我这样写的这个事儿呢,它就有变化了,我们再去执行一下。大家看此时呢,咱们演示的是在这个GT8当中,结果呢,你发现它变成了这个叫出和false,哎出和false是不是跟我们这个GT6哎有点像一样了,是吧?那这个时候怎么去解释啊,哎,那这块呢,我还是啊又给大家画了一个图。你那这上就是一个AB,那你一上来了,在常量池不就放了AB,这时候就没有对空间中你这个对象存在了,那没法指向这个呃地址了是吧,那这时候你就是实打实的有个AB,所以这个呢,你看叫2233,然后你这个S的话呢,还是这个记录的是122,而我们下边这个s.in ten s.in ten的话,去长按这边找有吧,有,那有的时候呢,我这块返回的就是2233了,所以导致S2呢,跟这个S它俩的地址呢,它又不一样了。
07:12
对吧,看678当中全是这样的一个效果。诶,所以呢,咱们刚才那道面试题呢,其实也是这样的一个套路啊,就是看你一开始有没有,它就是做了一个变形嘛,变形之前呢,就是没有,呃,变形之前没有变形的时候呢,就加了一个它就这样个区别。再体会一下,那有的同学可能说本来那刚才那个例题呢,整的感觉有点清楚了,然后又讲练习题,又又给整懵了是吧。啊呃,那这呢,我觉得也是一种学习方式啊,就像你这个水杯一样啊,这个呃有点浑浊,然后呢,呃,大家呢,就想等他这个沉淀以后呢,就变得清亮了,那我现在的作用呢,就是我再给你搅浑,哎搅浑之后呢,然后呢,让你彻底的都混了以后,你彻底的把它弄明白。啊,弄清楚,刚才的明白呢,那可能只是稍微的感觉有点清楚,但是又换了个场景呢,又不明白了,那说明还是没有彻底的整明白,对吧。
08:01
哎,把这两道题呢看一下。
我来说两句