00:00
好,那随着呢,这个内容呢,讲完了,整个咱们这一章呢,就告一段落了啊,那咱们做一个复习。哎,打开我们这个复习。哎,打开我们的这个。好,那么关于这一章呢,我们看讲了几个事儿啊,第一个呢,是跟字符串相关的一些类啊,那首先提到了就是string这个类。这个呢,我们把它单独列出来,然后第二呢,我们提到跟字符串相关的另外的两个叫可变的字符序列。啊,Buff。Builder是吧,哎,这样的两个类OK啊,先放到这儿,然后第三个这呢都是跟字符串相关的,然后呢,我们除了字符串相关的以后讲到日期时间的API是吧。这个我们首先提的是诶JDK8之前的日期时间API。好,然后呢,来了一个JDK8。当中引入新的。哎,日期时间的API。
01:01
哎,这个没问题,好,然后呢,日期时间那篇呢,我们就说完了,然后接下来讲了一个重点。渣当中的这个比较器是吧。OK啊。然后啊,然后再来个六这个呢,就叫其他的哎,API是吧。行啊,就这样的几个内容,哎,OK,咱们回过来看一下,这个整个也要来看的话呢,我们讲的时间上来看,讲此论这块其实花的时间还挺多的。嗯,那也说明呢,我们在平时开发当中啊,其实用的也比较多一些啊,那关于时政这块呢,回忆一下我们都讲过几个事儿哈。首先的话呢,我们提到呢,它这个string,它的一个声明啊,这块呢,大家做一个了解就行啊,从声明当中呢,我们能看到呢,第一个它有个final的修饰哈。这个呢,在有些比例当中,他有时候还问你,他说呢,我现在定义这个string的子类,说没问题吧,其实是有问题的是吧,对他不能有子类了啊这个final呢,去修饰这个string就是不能被继承了,另外呢,就是它天然的话呢,我们说实现了。
02:03
尤其呢是这个叫comparable这个接口是吧。所以呢,它就可以呢去比较大小了啊,另外呢,还有一个呢,叫serialable这个接口。啊,这个呢叫可序列化,后边呢,咱们讲IO流的时候呢,再说这个可序列化的事儿。包括呢,以前我们在讲异常的时候哈。讲这个exception的时候呢,我们尤其在自定义这个异常类的时候,当时咱们写了一个叫全局常量。叫zero u ID。序列版本号。还有印象吗?就是继承这个,诶,我们自定异常类的时候,不是有一个那个全局常量吗。诶,那个权益长链的话呢,也是跟这个序列化这块其实是有关系的,诶我们都放到IO流这块呢,我们再去解释啊。啊,这是它的一个声明,声明完了以后呢,我们就提到了这个string它的一个特性。不可变性是吧。哎,就是你想对这个对呢做一些修改,这个事儿呢不靠谱啊,这个呢,你得重新的再去声明。
03:03
啊,其实说白了就是为了,呃,就是咱们呢,比如说声明的几个字符串啊,都是使用的这个常量池的,比如说叫hello。从我们使用者的角度来讲呢,其实你感受不到它是共用的。啊,你就正常用就完了是吧,你感受不到是公用的,只不过呢,它底层呢,实际上呢,是让你共用的。这个其实的话呢,也会涉及到啊,叫想圆的这种设计模式。前面我们提到这个显示设计模式是在。讲的时候它底层是不是有一个类型的一个数组是吧,那个数组里边呢,保存的是负的128。对,到正的这个127范围内的这些TE的这个对象是吧,这个你要使用的呢,是在这个范围内的这个对象的话呢,直接从这拿就行。其实这就一种响应的这种设计模式啊,然后呢,我们这个字串常量池呢,也是这样类似的思路啊,所呢,你要需要的话呢,你直接呢,从这个常量池里边拿这个现成的用就行,但是这块用的话呢,我们感受不到啊,抛阴气我们用的话,咱们也感受不到。
04:05
啊,那一旦说我们现在有一个字符串,不想叫哈罗了,我想叫别的。那这时候呢,你不能在现有这个位置去改,因为你改的话,别人不也跟着改了吗,那不就麻烦了吗?是吧,所以这块呢,凡是你对这个搜你想做修改的话呢,那你自己去整个新的。这个呢,就是对于他来讲,我们就称为那叫不可变形啊。任何修改都不能在原有的位置上去操作。啊,记住这个事儿就行啊,咱们当时呢,还举了好几个例子,比如说哎,重重新改个值啊,或者你拼接个数啊,或者我们这个replace一下,你发现都是不可变的。OK啊,然后呢,接下来我们还提到了一个string,哎,它的两种定义方式是吧。对,两种定义方式,第一种方式呢,我们称为叫字面量的这种定义方式。就相当于我们直接呢,比如说这个string s等于啊这个呢,直接写个hello,哎,右边这个呢,我们起了个名就叫做自变量。
05:01
啊,你说为什么这叫自变量,什么是自变量,这就是啊。啊,这个只不过这个词呢,在咱们汉语里边好像不太不太常说啊,你就知道这就叫自变量的方式就行。然后呢,第二种。那就是我们说呢,正常你作为一个对象来讲是吧,作为一个类来讲啊,需要使用这个new的方式。来去创建的啊,这个很好理解了。哎,你有一个具体的一个string是吧,这个你叫一个hello,哎这样一个方式啊好,这呢是它定义两种方式,那么前者。啊,这种定义方式呢,我们就涉及到这个字符串常量池的问题了。哎,所以这块呢,就涉及到string的内存的一个解析的问题了。啊,解决问题里边呢,就会提到了这种方式和这种方式有什么区别。啊,这里边儿就提到了相关的点是吧,所以这个内存解析的话呢,对于死顿来讲呢,它比较麻烦一些,也主要呢,就涉及到咱们刚才提到了啊,类似于像想源的这样的模式了啊,它呢要共享数据的特点啊,所以呢,它的内存解析的话呢,这我们就提到了有磁串。
06:06
哎,常量池的这个概念了。哎,有这样一个结构,然后另外的话呢,像这种new的这种场景呢,是不是还得涉及到这个堆内存的一个使用啊。整个呢是这样的特点,需要记住一点呢,就是自由这常量池里边是不允许放两个相同的子变量的。所谓的相同的,就是用equals你去判断,只要一样,那就算是相同的了。啊,这是这样的特点。行啊,具体的话呢,咱们也讲过这个事儿了,另外一个呢,常见的一个,呃,笔试题或者面试题呢,就问像这样的方式呢,问在内存中造了几个对象是吧。对创建的对象的这个个数啊,哎,这个是两个了,一个呢,就是你new的方式呢,是不是对立的有一个。啊,另外一个呢,就是我们在常量池里边呢,也给你放一份这个相应的这种hello的这个是吧。啊,就是这样的特征啊好,这呢是我们说的这个问题。嗯,然后接下来啊,接下来这块我们提到什么问题。
07:04
啊,提到了string,哎,叫连接操作。就他。这个咱们当时还做过好几个小的题目是吧。对,当然我们提到过有这个叫,哎,常量跟常量之间的这种问题。啊对,然后呢,就是变量。连接上的这种常量。然后他俩颠倒一下,我就不说了啊,常量加变量一样啊,然后还有呢,就是变量加变量是吧。哎,这样的一个问题,这时候你得清楚呢,它哪一种,它到底是放哪儿的是吧。啊,这个咱们说过了啊,如果呢,你都是以这种自变量的方式,常量加常量这块呢,其实还是一个常量是吧,还在常量池里边啊,像这种的话呢,是不是都相当于是。New的是吧,哎,这个注意啊,这种new的这个情况呢,其实还适用于咱们说的con。调离方法呢,是一个字符串,然后参数这块我再放一个另外的字符串。
08:03
这个时候呢,其实里边呢,是不是也是一个new啊。哎,这个咱们看过啊,这也是一个new。OK,这个注意一下,然后这块呢,其实我们还提到另外一个方法叫做是吧。啊,这个方法调用完以后呢,它返回的还是一个string。啊,它返回的呢,其实就是在自串常量池里边的啊,你这个自变量的啊,那个数据的一个地址了。啊,注意这就是inter的一个使用,实际上呢这块呢,关于inter这块使用啊,还有比较细的地方。我就没具体展开讲了,这块要展开讲了,咱们一节课呢,可能得说上一节课啊,因为在不同的GDP版本当中啊,还不一样。啊,还挺麻烦的啊,就是如果你要有兴趣呢,想了解这一块的详细的信息。啊,这块大家可以看一下这个。那个就GM那套课程了。来,再来个广告是吧。嗯,GM这块的话呢,你去找。
09:01
先把声音关一下啊。这个我在讲到。找一下啊。在这儿是吧。在这个100多这块了啊,这个呢,就专门讲这个的这个内容的时候,然后讲了好多节哈。在这块的话呢,是说这个死论说的比较细一些了,但我建议大家你暂时呢就先不用着急看了,你如果呢,需要这个笔试面试的时候呢,你稍微再搂一眼就行啊,花一点时间看看。这个就不多说了啊,就这块儿呢,其实细节呢还挺多,咱们在基础阶段呢,就不给大家整那么细致了啊,行这个就过掉了,然后从我们编写代码的角度来讲呢,下边就比较务实了,我们开发当中其实更多使用呢,其实都是它的一些常用的方法了,所以我们需要呢去熟悉一下啊string。比如说这个一个呢,叫构造器。啊,我们讲构造器的时候呢,其实还说过与与叫其他结构。之间的转换啊。
10:03
啊,这是一个问题,然后呢,下边就是常用方法。OK,就这个内容,然后在这个内容里边呢,呃,这块有专门的一个内容呢,我们要再提一下,就涉及到它与这个BAT数组之间的转化了。啊,String by数组,这呢就涉及到string呢,你可以叫字符串也可以呢,咱们说呢叫文本啊文本呢跟字节或者叫字节数组之间有转化,这呢我们提到了叫一个编码和解码是吧。哎,这个得清楚啊,然后这里边儿这个编码。编码啊。编码呢,它对应的是。啊,这个呢,就是从字符或者叫字符串。哎,转换为叫字节。或者叫字节数组是吧,这叫编码了,然后解码。反过来。对字节呢,或者叫字节数组转化为呢,我们能看得懂的字符,或者叫字符串,这个呢,其实是比较重要的啊,那对于我们这个,呃,叫什么这个文本数据来讲,这个编码这块呢,我们对应的可以呢,叫编码集是吧。
11:19
哎,对应的编码集,然后这个呢,你可以呢,理解成叫对应着叫解码集,但是一般呢,我们都泛泛的就称为呢,就是对应的一个字符集了。OK啊行哎,那相应的这种字数集呢,像我们说的这个啊,阿码啊是吧,UTF8呀,JBK啊是吧,等等这样的这个场景啊,OK,哎,那这块呢,我们就先说到这个程度,等到后边我们讲IO流的时候。啊,会讲到一个流,叫做转换流。到那个时候呢,我们还会再给大家来讲一讲这个事儿。OK行,到那个时候呢,我们讲完之后呢,关于这块呢,大家就不应该再有任何的问题了啊,因为多少这块呢是一个难点,尤其呢,在我们程序当中出现乱码的时候,你一定要想,那就是这个字符集的问题了。
12:04
在这里边儿呢,要想不出现乱码呢,咱们当时呢,是有一个叫规则也好。啊,或者要规定也好啊。呃,这个是怎么说来着。是谁得给谁一只?是解码呢,是跟着编码一致,还是编码跟着解码一致,对解码跟着编码一致是吧?呃,因为呢,一开始我们在内存里边写的都是一些字符串了,然后呢,你把它保存的时候呢,是某一个编码集写到几层010101了,然后现在你想看一看这个到底是诶。什么样的一个文本数据了,然后这块你在解码的时候呢,必须使用这个解码机,跟当初用的编码集必须得是一致的。否则呢,就是乱码啊。哎,我们这儿写一下这个规则,就是解码级必须使用当初。呃,编码时。使用的这个编码。
13:02
啊,只要不一致。哎,就可能出现。啊,乱码。哎,我这竟然用了一个可能是吧。嗯。对,就是说呢,如果你这里边儿呢,放的都纯粹的是这个abcd这样的是吧,其实呢,因为他们都向下兼容X码嘛。所以这块你里边没有汉字的话呢,你这块我用的是这个JBK,我解码的时候用UT8,你说怎么我这也没乱码的,因为你也没汉字是吧,Abcd这些呢,大家都是兼容的,所以都是一样的这个。对应的那个数了啊,所以呢,就没有出现乱码。好,这就过了啊,这呢是一个难点问题。嗯,这呢是我们string的这个相应的一些方法了,这个呢,如果说后边再加一个内容的话呢,实际上呢,就是从笔试的角度来讲,大家呢要会去处理这个,呃,String这个有一个相关的。这种算法问题是吧,咱们课后呢,不是有几道小题吗。呃,实际呢,我们会发现呢,在呃企业这个笔试当中啊,他如果要考的话呢,一般要考也就是两块常爱考的这种算法题,一个呢,就是跟数组相关的。
14:06
包括呢,像数组排序是吧,咱也可以归到里边了啊,然后另外一类呢,就是跟相关的。啊,因为在平时开发当中呢,我们这个处理字符串的场景呢,还是比较多的哈,哎,会问你一些相关的这种小的一个操作,这个操作里边呢,你就使用涉及到的一些常用方法来解决这个问题呢就可以了啊。好,那整个这块呢,我们就关于string说的挺多了啊,然后下边呢,这两个类,诶大家呢,首先要清楚,咱们以一个面试题的角度去说。那就是它们三者的区别是吧?这三者区别的话呢,即使不是一个面试题,大家也得知道。要不的话呢,你就不知道我们讲这两类的意义是什么。啊讲它们的意义呢,就是因为他们跟string有区别,所以我们才会用是吧?诶那这呢,咱们当初讲的时候不也是看它的源码啊,通过看源码呢,我们知道什么时候呢会去用这两类。
15:01
啊,这个呢是比较务实的啊这个呢,你需要呢,去知道什么场景下。哎,使用,哎,咱们说的这两个结构啊,首先的话呢,这个string你别看它是不可变的,你说这个string不可变了,我们这可变的多好用,我以后都不用了。其实也不对是吧。啊,因为很多时候呢,我们这个率呢,都没有对它进行一些比如说增删改的操作了。你像这个用户呢,在界面当中呈现的这个数据,是不是都是通过这个数据库,数据库里边把这个数据查完以后呢,我们就到这个Java的这个后台了。Java代码呢,这个比如说像最基础的啊,就是JDBC了,通过这个JDBC呢,我们去这个查询数据库里边这些数据查完以后的话呢,里边有一些都是字符串嘛,这个我们也不需要对它进行修改,直接呢就返回给客户端或者是浏览器呢,你就呈现一下就完了。这不都得是死菌类型?包括呢,用户呢,从这个客户端或者浏览器呢,它输入一些数据,比如说你这块呢,你想搜索一个。
16:02
世界杯是吧呢一回车,哎,这个呢,写上你的名儿,登录注册一下,像这些呢,你都不需要修改,所以我们用的其实都是顿。只不过呢,是针对于我们经常去呃做一些增删改操作的这种字符串,我们才会考虑这两个。他俩这块我们选哪个取决于什么呀。对,是否是一个多线程问题,他们呢,是否作为这个共享数据出现的是吧,这时候我们才会考虑线程安全与否的问题了,否则的话呢,这个我们就都stream build了呗。就可以了是吧,然后呢,我们看源码的这个事儿呢,大家诶熟悉一下就行,后边呢,咱们要讲集合,集合呢,其实呢,他的一些呃思想想法啊,跟我们这个STRING88BUILD呢是类似的,到时候我们再去说集合的源码啊。好这个啊,JDK8当中的日期时间API这个咱们都都包括这块啊,涉及到的其实都还挺多的,哎,大家呢,整个就过一下,需要的话呢,你哪哪怕你回来再再看一看是吧,都可以啊。
17:02
嗯,这八之前呢,我们提到过这样几个啊,第一个呢,算是算是一个方法了,就是system这个类的一个current。Time。是吧,哎,这个呢,就算一个获取时间戳了啊,这是一个方法,然后接下来呢,提到了叫两个。Date的使用是吧。然后呢,下边呢,我们提到叫simple。对。Format这个呢,是用于。对格式化解析的是吧。哎,格式化解析咱们说过了啊,比如把这个日期变成字符串啊,字符串变成日期啊是吧,这个过程啊,然后呢,再提到这个第二类的这个日期时间的PI。叫日历类的使用是吧。啊,这里边提到get set是吧,还有我们这个去at,哎,Set time get time啊对应的跟date之间还可以转换啊,所以这块里边这个呃方法呢可能也不少,大家这块你就整个呢,熟悉熟悉就行啊,然后这T8里边呢,我们就提到几波新的,新的话呢,我们可以对应的去说,首先呢,我们提到呢叫local。
18:10
Data。Local time啊。Local date ha。这三个类呢,可以看作呢,哎,我们说那叫类似于。还记得不?Calendar是吧,Calendar里边不是有那个get,这个get相关的一个属性set一个是吧,他那不是类似的也有这样的功能吗。是吧,嗯,行。然后呢,这是它,然后呢,接下来呢,说了一个叫顺时。是吧,它呢类似于。算了,都忘了是吧。类似于是不是date呀。有点忘了啊,一个对呢,咱们讲过两个构造器,它呢,其实对应的也有两个相应的方法是吧,一个呢,就是点no获取当前的。然后还有一个呢,就是有一个叫什么呀。
19:02
叫of吧。你看我们这个JD8里边儿打开。哎,往上找。哎,在这儿呢是吧。诶在这这不有个of吗?就是针对于你给定的这个时间戳,然后呢,我们获取当前的这个时间戳对应的那个时间的一个对象吗。哎,这不就跟我们那个new一个date里边呢,构造器里边放一个时间戳一样吗。哎,这样的啊,然后后边这个还有一个叫to,就是获取呢,我们这个时间戳的。啊,这样一个情况。嗯,然后它下边呢。它下边这块呢,我们还涉及到一个跟我们这个SIM data的format啊,跟他呢,去对应的是有一个叫。Date time。啊former啊就他啊他呢就。哎,类似于。哎,Form,他长得都有点像啊。行,这个呢,知道这样一个对应关系就可以了,呃,然后呢,我们还有其他的一些新的日期时间API,咱们就不多说了啊,那也很多了,大部分呢,可能我们在一般的开发当中,项目当中可能也都用不着啊就行。
20:09
哎,然后那个比较器呢,比较重要的是吧,两个啊。加。呃,一个呢,叫自然排序啊,涉及到。叫comparable是吧?哎,再一个呢,叫定制排序。涉及到呢?是。这个现在知道为啥这叫自然排序,不,这叫定制吗?电视好像好了一点是吧?就是临时呢,你需要指定一个定制的某一个比较大小的一种方式了,这不叫定制嘛。哎,自然呢,你可以就想象成相较于他呢,就自然而然的啊,给你一种方式。对,就这样一个方式,对,它可以一劳永逸,这个呢是一个临时的方式啊,啊,这里边儿的这个抽样方法呢,别。整不清楚了啊,这个呢。调这个方法的这个对象呢,是一个要比较大小的,所以呢,就是它呢跟to啊跟另一个。
21:01
所以呢,你看它这个有一个兔哈。嗯,然后这个呢,就是纯粹呢,是比较大小的里边有俩是吧,所以你看这个名起的话呢,其实也能够去理解的啊,那就可以了,行,这个呢是比较重点的啊。哎,这就过了,然后其他一篇啊,这边大家做一个了解就行啊,我就都不写了。好,这呢是我们这样的一个总结的内容啊,好,那么下面的话呢,我们来看一看这一章的企业真题啊,有这样的一些题目。诶,第一个说以下两种方式呢,创建string的对象有什么不同啊,这个是美团的是吧?啊这块呢,其实我们都已经提到过了啊啊这种的话呢,我们说呢,在对空间创建,哎,同时呢,这个常量池里边,磁符串常量池里边,如果没有的话呢,我们还要放一份的,这个呢,就直接声明在磁符串常量池里了。所以这个呢,咱就直接就略了。说这样的方式呢,创建了几个对象。啊,这已经说过了是吧,实际上呢,这道题目呢,跟上面这个题目的话呢,是它的一部分。
22:01
下边这个说string的一个A是ABC string那个B是A啊,连接上这个BC,问他俩是不是等等。是吧?是的啊,哎,咱们说过了,这种方式呢,其实就相当于是ABC。在编译以后生成的解码文件文件里边啊,就是用的这个是吧。所以呢,它是等等的,因为这是常量啊。下面一个问题说Java当中string当中的这个连接符是怎么实现的,这是阿里的这个题了。啊,这个题你看出的其实还挺好是吧。这个要答的话呢,其实要说就是我们上面提到的这个场景了。但是他其实主要让你说的呢,其实你也能想象到,其实这种场景是吧,因为常量加常量这块呢,其实就跟你这个直接写一起是一样的了,关键就是这个变量跟常量这种要参与运算的话呢,我们说它是怎么实现的呢。是吧,这个呢分成两种情况,这种情况呢,咱们就略了,这个跟你写一题是一样的,这种场景的话呢,咱们在讲课的时候呢,其实我提到过这个事儿。
23:02
找一下咱们这个。啊,我看应该是在这个里边吧。咱们写到那写这个的时候,是不是咱们专门的讲这个问题,而且你看这块我也写了。这种变量呢,跟我们这种常量或者说呢,你是变量跟变量是一样的道理,他呢做这个连接运算的时候呢,我们当初看一下这个直接码文件,呃,其实呢,发现它底层使用的是。String builder是吧,咱们当时讲的还没有讲这个string builder呢,现在呢,咱们属于这个复习了,这都已经都讲过了,哎,找一下我们这个TEST3这个方法,找这个code。啊,那你看这块其实就能找到哈,它呢首先呢创建了一个string builder,哎,然后呢,当然创建string builder的时候呢,相对应的啊调这个in的方法啊,这就涉及到这个构造器啊,创建这样一个对象,然后呢,它会通过这个呃,Pen的这个方式呢,添加过来一个,这是LO11呢,其实就我们相当于这里边这个hello了。哎,有同学说,诶一角标一角标一不应该是第二个元素,第二元素不应该是word吗。
24:03
注意我们第一个元素的话呢,其实是谁呀。哎,在这里边你能看得到啊,它这里边一个呢,叫局部变量表,这里边这个角标零呢,其实是Z是吧,角标一的话呢,这叫S1 S1的话呢,是不是叫hello啊。所以呢,诶,对于这种非静态的方法呢,它的角标零的位置呢,是最死啊。所以呢,这块呢,我们回过来啊,看到这个角标一呢,其实就是hello啊,所以呢,他其实呢,通过这个build这个对象呢,呃喷了一下我们刚才这个hello,然后呢,诶我们又加载了一个这个word嘛,然后把它呢也呃喷进来,最后的话呢,不是hello word就拼音起了嘛,我们再调一下string build里边的to string那个方法,这个方法呢,咱们当初也看过它的源码,源码里边呢,就是new了一个string。哎,所以这个整个过程呢,非常的清楚啊,也就是说呢,它这个操作呢,首先呢,它呢,创建了一个。哎,创建一个叫string builder,它没有用buffer,因为这不涉及到现场性问题是吧。
25:05
哎,或者说呢,这个string呢,你本身也是线程不安全的,所以呢跟他呢是比较匹配的,创建一个string build的这个实力,然后呢,通过这个呃pen的方法。然后呢,添加这个字符串信息是吧,然后呢,最后呢调用。透论方法,返回一个字符串。然后呢,这个出勤方法内部啊,在这写一下。哎,它呢内部啊,实际上呢,是扭了一个新的string是吧。哎,时针的这个实力,所以呢,就使得我们看到的这个场景呢,比如我们这个代码里边,这里边这个S5,这是新旧的,S6是新旧的,S7也是新旧的,所以它们三者之间做等等的判断都是false。啊,这就很清楚啊好。下边这个Java中的一个呢,是不是final的。一个事儿是吧,哎,这个呢是行不用多说了啊,所以呢,就决定了他不能够被继承。
26:03
下边说string呢?为啥不合并在内存中的具体的形态?为啥不可变?为啥不可变?规定不可变是吧?哎,就是规定不可变哈,呃,那可能要问说为什么规定不可变是吧?呃,为啥规定不可变呢?其实就是为了咱们在实际开发当中,这个string啊,其实用的呢是极其频繁的,所以呢,我们就把呃,大家呢,可能会有一些共同的一些租串的信息呢,我们就共用了,实际上是为了节省空间的一个考虑是吧。诶当然了,你这块也不用心去创建的,从这个效率上来讲呢,也会更快一些啊。啊,那内存中的具体形态呢,这里边儿其实就考虑到呢,我们针对这个string的话呢,专门提供了一个。叫子午串常量池是吧。诶,所以这块呢,你看阿里问呢,那你可以多说一下这个搜串常量池,它在这个不同版本当中的一个位置。在JDK7之前。啊,那就是说六啊及六之前呢,所以它在这个方法区的啊,然后在这K7及之后呢,我们就放在这个堆空间里了。
27:08
啊,有这样的一个情况啊呃,然后呢,本身呢,如果我们通过new的方式呢,去创建一个string的话呢,那还得是在堆里边呢去拗一份啊,所以这块堆里边呢,这个一部分呢,你可以看作是呢叫租串常量实的这个区域里边呢,都是放这种字面量的哈,另外你要new的话呢,它这实打实的我们去造一个对象。啊,这样的一个情况啊,好这呢就是说的它细节呢,我就不在这多写了啊下边说string呢,是否可以在Switch当中去使用了。对,就是Switch后边有个小括号,我们填那个表达式的是吧,能不能类型可以,这个是从JDK7开始啊。哎,这个大家稍微了解一下,我们加了一个行三的,就是这个表达式呢,可以用string。开始可以使用。好,下边这个说string中有哪些方法,列举几个。啊,这个确实呢,呃,包括呢,之前也有同学反馈呢,在呃面试的时候呢,可能就聊到这儿了哈,说到spring的时候,诶说spring里边有哪些方法,你能说几个吗?
28:06
啊,因为呢,我们开发当中是比较常用词频的,所以应该呢,能够信手拈来不。稍微的说上七八个。应该是比较轻松的啊。哎,这个你往哪个方向去答呢?首先呢,你比如说这个词率呢,涉及到跟其他结构之间的一个转换这一块。你不就好几个吗?To查啊,Get啊,Value of啊。是吧,这这几个就出来了是吧,这仨了,就这都说了一半了是吧。然后呢,随便的你查一下呀。你带四五啊。很开呀。还有啥ES呀,Compare to啊。这这超了吧。对,应该轻轻松松就能说很多啊,这个咱们在讲这个令的常用方法的时候呢,咱们昨天测试的小三十个呢。啊,还不算跟其他机构之间转换啊,所以这块呢,应该是能取出来的啊,所以这个笔试面试的时候,尤其面试啊,其实他有的时候还是比较灵活的啊。
29:03
哎,所以呢,就是跟这个面试关系有关系,可能聊的聊到哪儿呢,就顺带着就问一问,聊一聊,是这样个场景啊。好,下边这个说这个re呢,底层到底做了什么?Subsre,哎,咱们昨天来讲这个说取一个子串是吧。其实昨天呢,讲的时候呢,我还看了元宝了。还有印象吗?哎,你比如我们这个string在这写一个这个呢,HR这个呢,比如说咱们就叫hello吧。然后接着呢,我通过它呢去调这个叫sub string。这呢,我写一个一逗号三。是吧,取这个范围对应的一个子串。萨的。IR啊嗯,这块呢,仍然体现呢,就是我们这个字符串的一个不可变性啊,你所谓的取这个串的话呢,并没有对我们个IR呢产生影响,而是你返回的这个萨100R呢,是你想要的这样一个,那么此时的咱们这个sub。啊str它呢,实际上呢是谁呀。
30:03
对这块呢,你注意我们这个一和三三呢,它指的是这个to是吧,到哪个索引的位置,不是说几个长度啊,所以一的话呢,是E。啊2L3的话呢,还是个L不要了是吧,所以这个呢,它其实得到是不是就EL啊。对,那这个EL呢,你看是我这样的一个写法的吗。就是这个EL,得到的是这个ST string,它是在这个常量池里边的这个EL。对不是啊,它底层呢,其实呢,是帮我们new了一个string,然后呢,他对应的实体的这个数据呢,是。啊,这个注意一下啊,呃,就相当于是这个底层是呃new的方式。哎,返回一个萨博itr。啊,返回它,然后呢,对应的实体内容。哎,是他。那言之呢,就是如果我们要是两次调这个方法得到的两个变量,那这两个变量如果用等等去判断的话呢。
31:02
是不是就应该是for了?哎,这个注意啊,这个substre,咱昨天呢,看过这个事儿啊,可能有同学忘了啊,然后写一个string。String找我们这个all places啊,这个比如说就看巴里的吧,然后呢,C f12,哎sub string是吧,就它,然后这块我们再取的时候看。就是的嘛,是吧。行啊,好,这个就过了啊。嗯,然后下边string string buffer和string builder说呢,操作字串有关的类啊,那就这仨他们之间有什么区别,咱们昨天一上来讲这个STRING88STRING build的时候呢,这不就说这样的问题了吗。这个呢是在这儿是吧,哎,说到他们三者之间的一个区别,行,这个呢就哎不多说了啊,这个你参照这里边去表达就行,当然了,你要这样说的话呢,可能别人也能这样说。啊,感觉没什么区分度是吧?哎,你要是愿意再多加点东西呢,你稍微的可以提一下,你说呢,诶关于string build的源码呢,你说我也看了是吧?哎,源码这个里边呢,是什么样一个情况啊,有这个呢,反馈出来的,它就是一个可变的一个字符序列的特征。
32:09
啊,那我们看源码的目的呢,其实是为了对我们开发呢,有一定的启示啊,这个启示是什么呢?你也稍微提一下这个呢,是不是感觉就比较圆满了是吧。啊,最好的面试的状态是什么呢?就对方呢,抛一个问题,抛完之后呢,你这块呢,就一直不停的再说,说到呢,他都不想接着你再问这个问题了,就换一个问题问是吧?哎,说明这个问题呢,他其实也没什么可问的了,答的是挺好的啊这样的。当然了,比这个更高级的问题是什么呀?对一个面试来讲呢。就是你能够拉着面试官。啊往前走,就是说呢,你这块呢,在讲的过程当中,有意无意的抛出一些坑,然后呢,让他呢去接着问你这个坑的问题,然后你再去打是吧?啊就是显得的话呢,他很被动,当然这种呢,你得。经过大量的面试,你才能够找到这样一种感觉,是吧?哎,不光面试呢,你还得有实际开发经验才行是吧。
33:01
呃,当然有一个问题大家需要去规避的啊,就是有的时候在面试的时候,面试官呢,他可能会问一些问题,这个问题呢,可能是他现在,呃,正在开发的时候呢,突然遇到个问题了啊,正好你来面试,顺带呢,他就跟你聊到这个点了,然后就问你了,然后你要不会呢,你就坦诚一点,你说这个问题呢,我没遇到过是吧。当然你可以说自己的见解,你说我觉得可能是哪块哪块有问题,或者呢,我觉得应该怎么怎么去解决,你可以这样去谈一些你的想法,这个没问题,当然你不能呢,这块你不清楚,你还自己编啊。你看这块呢,说怎么怎么着是这样子的,对方呢,可能这个问题呢,他也有点把不准,他说是这样子的吗?有的时候可能是炸你呢,是吧,啊你说是。但是你要这个呢,问题呢,确实你也把不准呢,你也别。瞎整是吧,你说是,然后呢,人家回去呢,一试发现不是这样的,有点害人了,就是吧,这个呢是比较恶劣的啊。哎,就别这样啊。好,这个我们再拉回来啊,说这个string呢,线程安全问题啊,String呢实际上还是线程不安全的啊。
34:04
OK,就是你要需要呢,把它变成安全的,那你就专门的再去加这个同步机制就可以了啊,它要再安全的话呢,这个整个性能就比较差了,因为我们用string的地方还挺多的啊,下边呢,他们俩的一个现场安全问题,这个咱们已经说过了是吧。谁安全谁不安全啊,这个咱就略了啊。好,这个关于string这块,你看还是有一些这个题目的啊,主要呢,还是集中在string的一个考察上,所以这块我们讲课的时候呢,说顿呢,说的其实也偏多一点,正常的,我们在开发当中其实用的话呢,咱们还是主要用它的一些常用的方法啊。所以这块大家还是要多熟悉熟悉啊。行,然后呢,关于这个比较器这块说呢,说说他俩的区别和使用场景,这个俩的这个比较,其实这块呢,呃,问题呢也是类似的,咱们呢,其实也都讲过这个事了。大家也不用死记硬背啊,你说我呢,是不是要把咱们这里边儿讲到的这个事儿呢,给他描述出来,不同的角度,也不用非得这么细了,只要呢,你能知道呢,什么时候我们该用这个,什么该用这个,尤其呢是什么时候该用这个。
35:05
关注一下是吧,其实呢,你就想象一下咱们在课件里边讲的时候呢。哎,涉及到的这个图嘛,是吧,这个呢,我们一进来它就有一种默认的呈现方式,实际上呢,就理解成了就自然而然的有一种排序了,这个你就可以让这个对象所属的类呢去实现comparable啊相当于呢,就是这种综合的这种默认的一种排序方式。然后呢,你要是有这种定制化的一些想法是吧,按照后边这样的一些方式呢,进行排序,那后边这些呢,其实都是定制排序了。这个也可以理解成就是我们的使用场景啊,诶OK行,那具体这块呢,咱们就不多去强调了啊,我就在这儿就略了啊,咱们都已经讲过这个问题了。好,那整个这一章呢,关于这个企业真题啊,我们就说到这儿。
我来说两句