00:00
呃,那刚才呢,关于这个文本块呢,我们给大家做了一个演示,应该说它的好处呢,还是非常直接的啊呃,那么关于这个文本块的使用呢,其实还有很多的细节,这个细节的话呢,我们下边具体来说一下啊,这个大家呢,可能会觉得说很清晰啊啊,当然其实这里边的问题呢,还是挺多的哈,我们分别呢来给大家讲解一下,首先第一个呢,关于基本使用啊。说文本块呢,是Java语言的一种新文字啊,以前呢,确实我们没有过三个双引号啊,这个连着写的这个情况,也就是说呢,呃,在我们Java时代这个新特性里边,我们讲过的这个词水表达式,包括我们现在这个文本块都属于这个语法层面的一些变化啊,这个它可以用来表示任何的字符串,并且呢,可以提供更大的表现力和更少的复杂性啊,确实是这个咱们刚才也有所体现了,说这个文本块啊,由零个或多个字符所组成,由开始和结束分隔符呢括起来,诶这个呢,跟咱们原来用这种诶双引号,双引号中间呢,表示这个字符是一样的,你可以表示零个或者是多个字符。
01:00
啊,这个没问题,好下边啊,这个呢是需要大家关注的啊,说开始分隔符呢,是由三个哎双引号开始的啊后边呢,可以跟零个或多个空格,那最终呢以行中止符结束,哎下边这个大家注意说文本块的内容啊,它是以开始分隔符的行终止符后的第一个字符开始的。很绕口啊,这个大家先记住这话,等一下呢,咱们来演示,然后这个结束分割符呢,也是由三个双引号来表示的,说文字块的内容呢,是以结束分割符的第一个双引号之前的最后一个字符结束的啊,这个有点绕哈,那关于这两个点的话呢,我们就有必要给大家做一个解释,好,那下边咱们来看一下啊,关于这个test block,这咱们之前呢是写的两个测试了,咱们接着往下再写测试啊,关于。嗯,我们说这叫test block的一个基本使用。
02:05
哎,TEST3啊,这咱们刚写这个三的例子了,行,那大家注意看啊,我们现在写个例子,哎,我这呢写一个叫TEST1啊,三个开始,三个结束,哎这样个情况,刚才呢,我们提到一个点哈,说呢这个开始是什么情况呢?说呢以开始分隔符,行中止符后的第一个字符开始啊,CTRLC一下啊这个我们说明一下,也就是说呢,我们这是三个啊,这个双引号啊,它之后的叫行中止符,哎像我们这儿呢,后边其实是有一个行中符的啊,比如我这块我写个123行吗?诶这个是会报错的,比如说我们要想写字符的话啊,你第一个字符呢,得写到下边,比如说呢,我一上来啊,咱们先来演示一下比较基本的情况啊,我写到这了,我写个ABC,这是OK的,对于咱们这个TEST1啊,如果是我们想写成一个这个普通的一个情况啊,比如我这写一个test。二哎,咱们用一个传统的字符串来表示,那么这里边呢,诶相当于我写了一个ABC,就我们这个字符串开始是谁呢?开始是以A开始的,那么怎么表示说它是第一个呢?是因为我们以这个三个双引号之后的这个行中止符以后,因为你后边有个行中止符之后的,诶A确实是第一个了,所以就相当于我们这是第一个。
03:21
啊,这是我们说关于这个开始的问题哈,那接着我们来说这个结束的问题,诶结束,哎这块也提到了,说呢,呃,以结束分隔符的第一个双引号之前的最后一个字符结束,哎,CTRLC粘过来,那大家能看到啊,我们这是三个结束的这个符号了,哎,它第一个符号之前,那之前的话呢,相当于我们看到这是一个ABC,那这个ABC,哎,我们这样写是一种写法,那这样写呢,也是一种写法,它是不报错的,那这两种写法有区别吗?是有区别的啊,我们这种写法就我刚才这写的这个叫TEST1了啊,它跟咱们这个TEST2呢,其实是一样的,那也就是说呢,如果我们现在写一个叫诶T一等等于T2吗?
04:07
来,你看我这时候用的这个叫等等于了啊,我们做一个这个it跑一下。哎,你看这时候呢,是一个处啊,当然我这时候呢,用这个ES也行,就是咱们真正比内容啊,你像这块它都等等都是一个true了,那用ES呢,它就更是一个true。对吧,嗯,就是我们现在这两个字符串呢,其实表达的是同一意思,也就说我们这个字符串啊,用文本块来写的话呢,就这样写,如果你要是改成用这个传统的写法,那表示的就是ABC,那么跟我们这种写法呢,是有区别的啊,我这写一个string,写一个TEST3,哎,我这样来写,然后在这我写一个ABC。嗯,大家看哈,这时候我们这个T1跟T3 T3呢,其实是不一样的,我这样来给大家表示一下,T一点我们几个LA点啊输出一下,然后同样的我们把这个T3哎的lengths点哎输出一下,那这时候呢,大家想一下啊,它的长度会是多少呢?我们这个T1里边有几个字符呢?哎,它是以这个行终止符以后开始,那就是ABC只有三个字符,而我们这个呢,ABC完了以后,其实后边还有一个换行符,所以它呢其实是有诶四个字符的。
05:18
看一下是不是我们想的这个意思啊。嗯,没问题是吧,诶所以这块呢,就是我我们要注意一下这个稍微的这个呃细节问题,呃以谁开始以谁结束啊,这是一个基本情况,好接着再看啊说这个文本块中的内容呢,是可以直接使用逗号的啊,但不是必须的啊,就根据实际情况啊,大家需要用逗号就用逗号,诶这个不用多说,呃然后呢,说文本块中的内容可以直接呢包含行终止符,呃允许在文块中呢使用换行符,但是呢,不是必须的,嗯,这个说明是这个意思啊,你像咱们呃刚才写的这个。嗯,刚才咱们之前演示过类似的这个情况啊,像这种呢,我们这个烂一烂二烂三,诶它自动的其实就有换行,它相当于呢,咱们之前这个用呃一对双引号写法里边的自己加了一个杠啊,表示这个换行的意思了啊,然后或者的话呢,也相当于是我们这样的一个写法,这属于一个字符串拼接啊,咱们主要呢,用这个文本块,其实解决的就是这种拼接的问题啊,包括呢,我们这有这个转移字符的问题,就看着非常的不舒服了啊,另外的话呢,咱们在这个文本块当中,大家可以根据实际需要呢,你也可以自己呢去呃写这个叫换行符啊,其实咱们下边的也有介绍啊,一会儿咱们再说啊。
06:31
好,那先把这个问题呢先说清楚了,哎,这不是刚才我们举的这个例子,相当于就是它是吧,也说过了啊,那下边呢,提到一个叫空四符串的问题,那空四符串该怎么去表示这个我们再写个例子。哎,这个关于空字符串的一个,哎表示啊。哎,单元测试这我们写一个四。
07:00
行,那么string这我还写的那个叫TEST1了,咱们原来呢要写一个空字符串啊,注意我这块说的不是这个闹的意思哈,而是说呢,这个字符串里边呢,没有具体的内容了,那我们就用两个双引号表示就行,那很自然而然的,我们这个t1.las,我们要是输出的话呢,它就是零。哎,就是这样一个情况,那么基于咱们刚才上面讲的这个知识点以后,如果我们使用这个叫文本,呃,这个块的话啊,Test block表示的话,应该怎么写呢?看一下啊,首先呢,三个开始,嗯,然后的话呢,诶说它是以这个行中止符结束,那以下个来开始,下个的话呢,注意不能这样写。那这样写的话呢,相当于我们里边呢,是包含一个换行符的,对吧?哎,我们这时候要是打印它的lengths,大家看一下啊,test2.lengthsout一下是不是就应该是一样。对吧,啊,因为我们这里边包含一个哎换行符啊,哎,所以呢,如果你要是想表示,诶,这个跟T1一样的这样个结构,我们应该这样写。
08:03
那这表示的就是一个空俗串的意思啊,此时呢,我们拿这个菜子一跟菜仓呢做这个等等的判断,哎,他俩其实也是一样的行,这个呢,我们就不多说这个事了,然后下边呢,提到了我们几种错误的写法,这个咱们直接粘过来给大家做一个说明。哎,其实也是比较清晰的啊,诶错误的写法,哎这个大家呢,后边在用的时候呢,要规避这样的一些写法了,哎应该说呢,咱们这个文本块啊,实际上是比较好用的,虽然呢,它目前也是一个这个算预览模式是吧?哎这我们看到这也是一个预览模式哈,就是preview,嗯,没有加到我们Java IC这个规范当中,但是应该可以预见啊,在我们后期当中,实际上呢是诶能够坚持保留的啊。行,那看一下这里边这个问题,首先呢,这里边我定这个A说呢是这样写,这是错误的啊,大家写的时候一定要规避啊,咱们这个文本块开始字符呢,它必须后边要有一个叫行中止符啊,行中止符之后才是我们要表示的第一个字符,你想想咱们什么都不放,还都得是这样写呢,更何况你这样写它肯定是错的哈,它就没有行中种符了,那这个呢,也没有行中符,如果你想表示一个,比如像这样的一个单独空格的话呢,呃,那你你得类似的这样去写了。
09:21
对吧?哎,所以这个写法两个哎都是错误的啊,这个咱们就注释掉了,然后下一个,下一个的话呢,这个呃写了一个开始的,没有终止的啊,用一个单引号呢,并不能表示终止,诶所以这个呢也错了,嗯,咱把它呢也注示起来,诶然后再下一个,再下一个的话呢,一看诶不报错了,编译不报错呢,并不意味着我们运行呢,是可以通过的,你看这是一个开始啊,也有一个行中字符这块呢,就是相当于咱们本身字符串的一个呃真正的内容了啊,然后这是一个结束,那看着呢是没有什么问题,但实际上呢,它是有问题的,我们跑一下。诶你看这时候就报错了,其实我们叫诶非法转移符,呃,因为我们这个杠的话呢,嗯,后边呢,这个空格了,我们根本没有这个转移符,所以就报错了,那如果我们要是用诶传统的写法,比如说写成个E哈,传统的写法里边我们要是把它粘过来,它其实直接在编译的时候呢,就报错了。
10:16
诶,这个菖回来给我们加了一个画好了啊,诶你看这样它直接编译报错,我们这个呢,编译没报错,但实际上运行的时候呢也报错,就是你不能够使用没有具体转移的这样的一个反斜线,如果你想输入的内容当中就是一个反斜线的话呢,那你得写俩是吧?诶得写俩啊,就像我们这个里边,那你也得写俩一样,那这时候我们再跑一下。哎,这是没问题的是吧?好这个呢要注意啊,哎这样写是错的啊,这个这样写也是错的,哎,我们把这个呢都给它注释一下,好这个呢,就是我们说的这个叫诶错误的写法啊,一个基本的情况啊,然后下边这块呢,还有具体的一个,呃,说明说呢,在运行的时候,诶这个也是大家需要去关注的啊,因为在我们讲这个string的时候,包括面试的时候也经常会问,诶我们定义这个string形的变量啊,我这叫S1啊,我这叫S2,诶这呢是我们直直接写了一个自变量的方式,比如说都叫AB啊,这叫AB,哎咱们知道呢,呃,这两个AB呢,都是在字符串常量值当中定义的,而且呢,它俩的指向哎都是同一个啊常量值等等AB,也就是说我们用等等去判断呢,它俩是一样的,那现在呢,如果我们一个呢,用传统的方式去表示,另外一个呢,用咱们说的这种温度块的方式去表示,那它俩呢,还是等等的吗?诶这块呢,就进行个说明。
11:32
说呢,在运行的时候,文本块呢将被实例化为死钝的实例,哎,就像字符串一样,从文本块派生出来的死钝实例与从字符串派生出来的实例呢,是无法区分的,哎,具有相同内容的两个文本块呢,呃,引用将使用相同的string实力,就像字符串一样,哎,说白了就是,诶咱们刚才其实也举过类似的这个例子了啊,你大家你看我这个写法呢,表示就是ABC,这个呢也是个ABC,我们这种方式定义的跟用传统方式定义的是区分不出来的,所以我们这时候用等等呢去比较,它们仍然指向的是字符串二常量池当中唯一存在的一个ABC啊,这个咱们在这说明一下啊,说这个TEST1和咱们的这个TEST2。
12:18
啊都指向了,哎,字符串啊,常量池中啊,唯一定义的啊,这个ABC这个诶自变量。诶,所以呢,我们这用等等判断是一样的,诶也就是说我们编译以后,真正在内存加载的时候呢,它俩其实就一个事儿,只是我们编译的时候呢,大家在写的层面上呢,更简洁了,可读性呢更好了,行这是我们说的一个基本使用的一个情况。
我来说两句