00:00
那么这样一道面试题啊,咱们就说到这儿啊,应该说呢,还是有一定难度的,然后大家呢,你下来呢,再看一看,看是不是能够理解我们这里边提到的一个问题,那关于GDK8当中啊,我就不演示了,咱们都是在这个七种演示的,对吧,八九也好,呃,因为呢,咱们自符串常量值都是放在这个堆空间当中,也没有变过,所以呢,这个结论呢,也始终是不变的,行,这个呢就过了这个完了以后啊,咱们先不着急呢,去讲下边内容这块呢,我们针对这个啊S3和S这块呢,我再做一个变形,大家看一下这个变形之后啊,你是不是还能够去理解啊,这时候我们再去新建一个这个class,看我这呢称为叫spring。啊一啊,String in inter一行,那这呢,我们再写个这个没方法,我把刚才咱们测试的里边的下边的这样几行代码呢,我把它粘过来啊,CTRLC一下。啊,粘到这儿,那这里边儿这个注释啊,没有用,我这儿呢,就把它删掉了。嗯,可以了是吧,行,那么此时的话呢,我们这块看一下这呢,用的是还是七的这个版本,那顺便呢,咱们看一下这个八也可以对吧,把这个八呢选中。
01:05
然后在我们这个run这个位置呢,咱们点开它。啊,针对于是我们当前这个应用里边,呃,咱们现在想测试的这个STRING1。关于它是吧,那这呢,我们也选的是这个1.8的这个版本,OK一下跑一下。行,大家呢,看到在这吧里边呢,它也是个出这呢没啥可说的,跟咱们刚才这个效果是一样子的,大家注意我现在做一个操作,这个操作呢啊,就是我们刚才的一个拓展,我就把这一行代码就是这个S啊,我往上提一行,跟咱们这个S3点特呢,它俩做一个交换。这做一个交换呢,实际上这个变化呢,就非常的大了啊,这讲就是咱们所谓的这个叫拓展啊,是咱们这个string啊,这个in inter,哎,这个点Java文件中啊练习的一个拓展,嗯,那么这个时候为什么这个变化就很大了呢?因为这个结论呢,已经变成了是一个false看一下。
02:06
是吧,变成false了,那这时候大家你能不能利用我刚才讲的这个知识呢,来去解释这两个事实呢?想一想,哎,看看你能不能解释,那这时候你可以把这个视频呢,先暂停一下,你看能不能解释出来。啊,那下边呢,我来解释一下啊,为什么呢,是这样子的,那这一行呢,咱们已经说清楚了,那你对应的就是咱们用了一个对象啊,跟这个解释是一样子的,就是你用的这个对象。没问题是吧,然后下边的话呢,我们这里边是声明了一个叫一,这时候你注意咱们上一行代码执行完以后呢,咱们在字符串常量池当中是不是不存在这个一呀,哎,这个同样的是满足我们这样的一个条件的,是不存在的,那接下来呢,我们马上就生成这个一,这个一你注意咱们不是通过这个in的方法调用出现的啊,咱们是直接呢,是写了一下这个一,那这时候这个一呢,这就是实打实的,我们在常量池当中实际上给你生成了一个字误串常量一。
03:01
这个呢,要注意在字符串哎,常量池中。看去创建是吧,或者叫生成这个对象呢,意义,那然后把你这个对象呢,付给我们这个叫S4这个变量。那你这时候呢,你注意了啊,它的不再不再是一个引用了,那这个实打实的这个对象跟我们new的这个,呃,你那个那个AB是吧,它显然呢不一样。哎,不是AB,这是我们是一一是吧,诶根据十打10NEW的这个它的地址呢是不一样子的,然后你这个S3.ininter呢,这个方法的调用呢,是我们去常量池里边找一下,看看有没有意义,没有的话呢,我们就现你这个引用,有的话呢,这个就诶这个就使用你现在的这个一看是不是已经有了呀,所以咱们这个操作呢,其实没有干什么事儿,去常量池里边一找,找着意义了啊,其实呢,他也没干啥,因为咱们也没有返回一个变量啥的,对吧?行,那么接下来呢,问S3跟S呢,地址是不是一样,显然不一样,那这个地址跟这个地址呢就不一样了。
04:00
对吧,哎,就不一样啊,那如果说呢,这个操作咱们接下来呢,我这又声明一个叫S5去接收了一下我们这个英特的反回的结果,那很自然而然的啊,这个也比较简单的一个问题,就是我们这个S5它实际上跟我们这个S4啊,它俩是同一个地址,对吧,本身已经存在这个了,你把这个已有的这个一一的这个地址呢,返回给给S5,所以四跟五呢,它是一样,而这个呢,它俩就是个,一个是false,那一个呢是出。执行一下。啊,没问题对吧?啊大家呢,再体会一下啊,这里边我们这个变形,那么基于这个的话呢,我们再来谈一谈这个int方法,你看总之呢,就是我们这块int呢,还是有一定的难度的,对吧?关于in的一个总结,好我这呢写的比较清楚,在JDK1.6当中,将这个字符串呢,尝试的放入常量池当中啊,我这就直接简起了叫串值尝试。那这呢也是常识,那关键能不能放呢,看一下在JDK1.6当中说,如果咱们这个串值当中已经有这个要要要放在这个变量了,就是或者我们这个组串对吧,则不会放入返回呢,已有的串值当中这个对象的一个地址。
05:06
啊,如果你要有的话呢,你就是放回U的这个对象地址在八中,诶在七起的这个版本中也是一样子的,关键呢,就是没有的时候怎么办,说如果呢,我们这个串当中没有的话呢,怎么办呢?我们就创建一个这个对象的一个复制品啊叫复制品就是完全呢,就是我们又拗用了一个对象,说白了哈,把这个对象呢,在常量池里边放一份,返回呢,你在串池当中放的这个对象的一个地址值,这是一个一个独立的对象啊,一个新的对象,说白了,而我们这个呢,说如果你这个串式当中要是没有的话呢,则会考虑把对象的引用地址呢,复制一份放入串式当中,并返回串串当中引用的一个地址。这个呢,就是咱们刚才呢说的这个里边的问题啊,咱们在这个常量池中,这一步操作完以后,常量池当中是没有意义的,那我通过这个操作在执行的时候呢,我们就考虑把你上面已经有的new的这个对象,它的地址呢,放到咱们这个常量池当中。
06:04
所以说你这里边再写个一,这个一呢,就用你上面这个地址了,也就是我们S3的这个地址了,啊,这是我们整个这个面试题的一个精髓,最后呢,就是溶解为我们这里边儿的这个两段话,哎,大家呢,看一看你是不是能够透彻的去理解。
我来说两句