00:00
大家好,我是海波老师,我们继续来讲Java中常用的类和对象,那么我们这里来讲啊,一直在用,但是一直没有详细讲的字串类型,那么我们这里拷贝一下来拷贝我们写上一个零式。把这个后面的呢,我们改成叫string。然后呢,点击OK,点击完成以后,把这些东西我们全都给它去掉,那么写上啊,写上我们叫字符串好了,写完了以后,什么叫字符串啊,所谓的字符串呢,简单的理解就是连续字符组合形成啊,组合形成的数据整体我们就称之为叫字符串,在程序中啊,一般用于表示描述性的数据,在加va语法中使用双引号包含的内容我们都称之为叫字符串。在程序中经翅用到字符串的各种操作,比如字符串的连接啊,比较啊,截取啊,查找啊,替换等等。Java提供了一个叫Java点浪点使string的类来对字符串进行一系列的操作,所以我们叫做Java点浪点使菌,这个类我们就称之为叫字符串类啊,通过它就可以对我们的字符串做我们的操作了,因为字符串啊在实际开发中用的非常多,所以无论在创建和使用上,我们Java都进行了很多的简化操作。那么。
01:17
接下来我们就来给大家讲讲这个Java点浪点使菌类的使用,不过在讲之前啊,我们还是要先画图说明一下逐串字符以及字节的关系,也就意味着咱们写上叫字符串啊,咱们叫字符字节。的关系,这个我们需要去说一下。所以呢,我们这里来给大家画个图,让大家体会一下,我这里呢,还是把咱们当前我们的这个哎,画成个小方块儿,然后呢,给它一个蓝色的。那么里面呢,我们就给大家写上了,我们就叫字符串锥。然后这里我们用白色表示一下好了,这个字符串呢,我们就画完了,那么前面提到了所谓的字符串其实是连续的字符组合在一起所形成的数据整体,所以简单的可以理解为字符串啊,它就是一个字符的数组,所以它里面啊应该有一个数组的概念,所以把这个数组呢,咱们画出来。
02:11
我这里呢,给他一个红色好了,那宿主当中就会有小格子呀,所以我们的小格子咱们这里也给他画一画啊来。放到这儿,然后呢,我们复制一下放过来,然后呢,我们再放过来就可以了,过来以后这里呢,我们给它变成我们的黄色,但是你要记住啊,既然是宿主的话,那么所以呢,我们这里呢,给它增加我们的,所以这里我写上一个我们的零。好了颜色呢,我给他一个紫色那行复制复制以后,那这就是一了。那这就是我们的一了,然后再来我们复制,复制以后那这就是我们的二就可以了啊好了,我们当前的这个字符串我们就画完了,但是不要忘记啊,同学们,咱们之前讲过,由于计算机字符编码的不同,字符是可以用字节来表示的,也就是说在加号中,阿斯克玛字符是采用一个字节来表示一个字符,除阿斯克玛以外的字符呢,是采用三个字节来表示一个字符的,所以这个图形呢,我得稍微的变一变,那比方说呢,我的第一个位置我写上一个A。
03:10
这个A是什么呢?这个A就是我的阿斯克玛,也是我们的拉丁英文字母啊,好了,然后呢,我这个一的位置呢,我改一下,我写成一个中国的中字好了,那我写完了以后,我把这个地方二翻过来,或者写上它我们叫做国好了,写完以后大家会发现我当前的这个字符串啊,其实就是A中国,不过呢,我的第一个呢,是一个拉丁英文字母,而这两个是我们的汉字,那行了,这就是我们所谓的一个一个字符啊,但是他们底层是不一样的,因为我们的阿斯克码的字符啊,它采用的是我们的一个字节来表示的,所以呢,我们复制一下,复制。复制完成以后,同学们这个时候呢,我把这个地方放过来,它表述的是用一个字节来表示我当前的操作,所以我这里放过来,放过来以后把它颜色变成绿色,我给它一个字节呀,比方说11吧,哎,咱们11啊,好了,这个变小点吧,咱们给它变小点。
04:04
变完了以后,我的箭头呢,我这边就指向了我的这个位置,但是不要忘记咱们后面的两个中国是我们的阿斯克玛以外的字符,它应该是我三个字节了,所以我复制,复制了以后我放过来,然后呢,把它拉大一些,拉大拉大以后把这个字节我放过来啊,放过来,然后呢,我这个字节放过来,但是我也不知道是多少啊,我就随便写啊,我就随便写,方说34啊这个比方说25可以吧,可以了之后把这个箭头呢,我们放过来,诶好放过来,放到这边以后,它应该是这个样子,同样道理呢,我把它咱们往这边放。放完了以后,我的国字呢,也是这个样子的,所以啊,这就是我字符串字符以及字节它们之间的关系了,所以呢,我这里也改一下,我们写上它,咱们叫做21,诶这个呢,我们改成55,哎,这个我们改成我们的71,诶行了,我是随便写的,好了,同学们,我图我就画到这里了,我们接下来呢,通过代码呢,给大家演示一下来先说一下构建字符串对象,在Java当中直接使用我们的双引号,它将字符串内容包起来,我写个张三,这个就是我字符串的内容,把它用双引号包起来,这就等同于构建的字符串,哎,老师不对呀。
05:15
我们要想构建一个对象的话,不就应该new出一个对象吗?怎么这里没有用new呢?诶,其实啊,这个构建的过程你是看不见的,它是由Java虚拟机在编译的时候自动完成的,所以看着简单,但它确实就是一个对象,它的类型呢,就是一个我们的Java点浪点使菌,其实啊,我们当前这种方式也可以采用常规的new的方式,大家看一下,我写上一个NAME1,它等于new我们的使君,然后呢,我再写个张三,诶,我这么写,你这么写是完全可行的,我们需要将一个我们双引号的内容作为参数给它传进去,但是你会发现多多少少感觉会叫多余吧,我直接如果能用的话,我为什么要给它再去传进去呢?是不是很不方便啊?所以开发使用时呀,还是用双引号这种方式会更多一些,它也更方便,所以啊,我们的Java虚拟机,它帮你简化了这个new的过程,你不用去new,它自动帮你完成了这个操作,这个需要大家注意,那当然了,编译器。
06:16
帮我们做的不仅仅是简化这么简单,因为字符串数据啊,它用的场景非常的多,所以如果频繁的去拗字符串的话,对于我们内存的资源的消耗也是不小的,所以在Java中如果使用双引号包含的字符串重复出现的话,其实使用的是同一个字符串对象,什么意思啊?同学们说一下,如果我们现在这么写的话,来写上它,我写完了以后大家看一下1234,我是不是给了四个我们的变量负的张三呀,但是记住了,在当前这里字符串对象它只有一个,而没有四个,为什么呢?因为Java讯机它已经做了优化了,但是如果你使用new的方式呢,它的对象就是一个全新的对象了,所以基于此呀,我也更希望大家在使用时直接使用双引号,而不是使用new的方式来构建植物串,但你说了,老师啊,我就想用new的方式来构建字符串不行吗?但你说你非要使用new的方式来构建字符串,其实也行啊,那咱们看看都有哪些构造方法吧,所以我们提示一下CTRP。
07:16
诶,你会发现会有很多呀,其中就包含了咱们刚刚讲过的,用那个差数组以及字节数组来构建字符串的方式,所以咱们这里呢,分别的就给大家演示一下来,咱们首先啊把这个都做掉。做掉以后呢,按照咱们刚才画的图啊,我们说了字符串啊,里面就是一个一个的字符,而这个字符呢,又是我们的一个一个的字节呀,所以呢,我们就现在先来,我写上一个差,然后呢,我先写上一个数轴,写上一个CS,我等于大括号,然后呢写上它,我们就叫做单引号,写上一个A,我再写上一个单引号,我写上中,然后呢,我再写上一个单引号,然后呢,我写上一个国行了,我现在就把这样的一个我们的字符数组呢,我就放到字符串里面去,行不行呢?来咱们看看,接下来咱们就写上一个叫string,我们的S,它等于new,我们的string,这个时候啊,就把我当前的差数组呢,直接放进去就可以了,你放进去以后,我打印一下这个字符串,我写上一个S,我们现在运行一下,运行以后看结果,同学们你会发现,A中国没问题吧,这就是个字符串,它就把连续的我们的字符啊给它组合在一起,形成了一个我们的数据整体,它就是字符串没问题。
08:32
啊,所以差数组能够变成植物窗,诶老师,那你不说了吗?我的每个差它不是一个我的字节吗?而且我们的阿斯克拉以外的字符呢,三个我们的字节表示一个字符,那这个咱们怎么体会一下呢?这个呀,咱们就直接给大家讲了啊,咱们现在来写上它,咱们叫bit数组,咱们叫BS。它等于什么呢?我现在给大家写几个数,大家可能就看不懂了,我写上一个叫负的28,写个逗号,我们再写上一个负的72,我们再写上一个负的83,然后呢,我们再写上一个负的27,再来我们写上负的101,再写上一个我们的负的67,老师你在干嘛?我现在就写几个数字啊,我这几个数字呢,就是我的字节呀,对不对,只不过呢,我写的是六个,哎,老师这什么意思我不太明白,没关系,我们现在呢,就来操作一下,咱们叫做string s1,它等于new string,然后呢,我们把那个字节数组呢,传进去是可以的。
09:32
但是我告诉你啊,我们说过,之前咱们讲过啊,咱们把那个字节组合成字符的时候啊,可能会由于编码的问题导致乱码,所以我们这里呢,给它加上一个咱们叫UTF杠八一个编码方式,但是这种编码方式呀,可能不被支持,可能会有问题,所以啊,我们这里呢,给它直接写上一个roses啊exception,我们后面会给大家讲咱们的这个代码是什么意思,我现在不管它,咱们就先这么做就可以了啊好了,同学们写完了之后,你把这个S1给我放过来,放过来以后同学们我运行一下,你看看你得到的是什么。
10:06
大家看看,你会发现你现在得的是不是就中国,你会发现我给你的不是中国,我给你的就是这些数字吧,我们讲过了,我们三个字节得到一个字符吧,对不对,三个字节得到一个字符,好,那两个字符不就是我们的字符串中国了吗?所以呢,这就是我们字节字符和字符串它们的关系,希望呢,大家有一个直观的认识,这个图希望大家能够注意一下啊,那好了,那说到和字符的关系了,大家想一想,如果咱们字符串里面我写上一个双引号字符怎么办呢?诶把这个注掉啊,注掉注掉以后大家看一下,我写上叫字符串,然后呢,我写上一个S,然后呢,我在这个地方呀,我在双引号这里面,我写上一个我们的双引号。你看过不去呀,我们程序现在是标红的,说明有问题,为什么有问题呢?因为啊,我们双引号它是我们Java语法的一部分,现在你想让他表示我字符串当中的文字内容,这样的话它就有冲突了,对不对?所以它就不行,哎呀,老师,那怎么办呢?我们当前的这个双引号,它被Java虚拟机它识别成我们语法的一部分呢,我怎么让它不被Java虚拟机给它识别,就想让它当成字符串文字的一部分呢?哎,这个时候你就需要转变它的含义,让这个双引号不再表示我们加用虚拟机所识别的语法了,那该怎么办?在它的前面加个斜杠,你加个斜杠以后,我们的家用训机就不会认为它是一个我们语法当中的双引号,你这么写就可以了。好了,我们接下来我们打印一下啊,来打印我们看看这个对不对啊,运行运行以后看看我们的双引号就应该出来了,所以啊,我们当前的这个斜杠呢,等同于改变了这个字符的含义,所以呢,我们。
11:53
把这个字符呢,称之为叫转译字符,咱们叫转译字符,那这个转译字符的斜杠双引号啊,斜杠双引号其实它就是我文字内容双引号就是这个意思,其实这样的转移字符呢,在咱们Java中还有很多啊,比方说咱们来接着写我们的斜杠单引号,其实也算,为什么呢?因为单引号在咱们加入语法中不是表示字符的意思吗?对不对,还有一个叫斜杠T,它表示叫制表符,制表符它是个太不键啊,还有一个呢,是什么呢?是我们的斜杠N表示换行啊对吧,表示换行,还有一个就是斜杠,斜杠它表示斜杠本身我现在想用斜杠你就不行了吧,哎,就这意思啊,这里呢,咱们分别给大家演示一下,来来来,嗯,写上它,这里呢,我们写上它,咱们叫做什么呢?哎,然后呢,写上一个斜杠,咱们一个单引号,然后这里我们写上它啊,我们叫做斜杠,写个T,这个T可能看不出来呀,我这么写吧,写个A,写上一个B吧,然后这里呢,我再来一个啊,写上。
12:53
啊,咱们叫A斜杠A,咱们叫C吧,C斜杠N,咱们再写上一个D好了,然后呢,我再写上一个,我们的这个叫斜杠斜杠也可以啊,斜杠斜杠,然后呢,我叫E,写成一个F,行了,同学们,我就把这几个演示演示就可以了啊行,我们现在运行一下,运行以后大家看结果你就会发现,你看我们的双引号,我们的单引号,然后呢,我的A和B之间加了一个tab键,咱们叫制表符吗?然后呢,我的C和D之间不就换行了吗?我的EF之间不就加了一个斜杠吗?哎,所以啊,这就是我们的转移字符,这个大家知道就行了,我们常用的其实就是这么多啊字符串咱们就先介绍到这里。
我来说两句