00:00
好,那么这样的话呢,我们把这个事儿呢,就介绍完了,这个介绍完以后的话呢,我们这个内容的话呢,其实就讲完一半了,剩下一半的话呢,我们看一下string和基本数据类型和包装类之间的一个转换。啊,那由于呢,大家你看啊,有了这个自动装箱,自动拆箱以后呢,其实它俩之间的转换呢,就非常的丝滑是吧。啊,乃至于说呢,你似乎都感觉不到它们是两种不同的类型啊。所以呢,我这儿呢,就不整的这么细致了,什么意思啊,你看我这块呢,画了一个图,其实啊。这个图里边呢,其实应该是有三者的啊,基本数据类型,包装类和string应该是它们三者之间去转换的,但是现在由于它俩之间呢,有自动装箱拆箱了,我就把它俩呢看成跟一家子一样了,咱就看string呢,你怎么转化成这样一个整体,或者呢你回来。所以呢,我就不具体去分的这么细了,包括呢,你看这张图里边,其实我列的就比较全,三者之间相互转换都有哪些相关的方法,乃至于说构造器的一些支持。
01:00
大家没必要整这么细,因为你最后开发用的话呢,还是用你最习惯的,或者说呢,这里可以推荐我们用的方式了。啊,所以这里边儿呢,我们用哪个呢,我都标示出来了,它俩之间自动装箱,自动拆箱。别的呢,你就不用考虑。然后呢,String呢,跟他们之间呢,我们就记住两个方法,那就是我这块写的这两个呢就可以了。那下边呢,我们做一个说明,好回过来。这个呢是我们写的第一个,咱们不妨呢再去新建一个。哎,Per啊。哎,它的一个测试啊,写个E啊。嗯,这呢,我们来考虑一下这个string啊,和基本税类型包装类之间的一个转换。哎,回过来放到这儿。这个粘过来啊。OK,行,那咱们先说这个方向吧,这个我写一个单元测试了。一啊。好,那基本数据类型包装类转化成string,在这俩转的时候呢,大家记住一个小的技巧,就是前者转化成后者的时候呢,我们去后者里边呢找方法。
02:06
比如说诶它呢,转化成这个词钝啊,我们就去润里边呢去找方法,那你先得整一个基本数类型或者包装类啊,这个都行,比如我这个叫IE,这个是十好,这呢我就去string里边找方法了,此类呢,你会发现呢,它有一系列重载的叫Y6OF方法。这呢,就把我们常见的这个基本水解型呢,都哎整过来了啊,所以呢,你就value of。哦,然后这块你把这IE呢,往这一扔就行。扔完以后啊,光标你往这一放,Y65的方法呢,自动的返回值啊,Alt加回车,哎,就是一个字符串类型。这就行,这个呢,你去打印一下呢,这个HR1其实呢,就是带引号的。啊,这个是。哎,在有些场景下的话呢,人家就是用字符串来表示的,那你就得给他包一下了。运行一下。那没问题啊,这块你看到这个十呢,它没带引号的,这个我们一直控制台呢,都是这样子的啊,哎,其实呢是有引号,其他类型一样啊string.y6of,你看这什么类型都行。
03:06
或者类型提前你提供一个。啊,这个我们来一个B,来一个true。然后你把这个B1呢往这一扔。哎,Out,加回车,哎,这不就是出来了吗。呃,其实这块呢,我们用的是基本数据型,其实呢,你也可以呢,嗯,把它呢就理解成是一个,呃对应的包装类的对象也行,比如说这块我就这样写的哦,这样。包装类的。啊,因为呢,咱们有了自动装箱,拆箱以后呢,我这写成B2这个呢,我就直接呢,B1这样一副,这是自动装箱是吧。然后呢,我把这个B2呢,比如往这儿再放一下。这个呢,你可以理解成呢,它其实又拆了一下箱。啊,然后呢,就往这放,其实呢,就是用起来呢,就没有什么影响啊,直接这样呢去用就可以了。好,所以这呢,我们就提到了一种方式,说怎么把前者转化成后者呢,这个去后者里边找方法,这个呢我们是调用。哎,String叫静态方法啊,或者叫重载的静态方法。
04:06
这个静态方法呢,叫value of啊,里边你就写具体这个类型就可以了。行,这是一个啊,其实的话呢,我们说基本数类型转化成string的话呢,还有一种更轻巧的方式啊。那你比如说我们上面有个印的这个I1,这个是十,我们就可以呢,直接比如I tr4,我就让IE呢,是不是这么着也行。啊,因为呢,咱们前面讲过说基本数据类型和字符串呢,可以做连接运算啊连接以后呢,结果还是个字符串,那就这样呗。哎,这呢也是一种方式啊,IT25。哎,这个呢,我们上面有个B1啊,这个类似的也可以,所以这呢也可以理解成是一种方式。哎,上面这块呢,你可以理解成这个叫方式一。CTRLC。这个呢,咱们叫方式一啊,这个呢,你可以理解成叫,哎方式二啊,这个呢,就相当于是我们在这再写一个啊。
05:00
哎,相当于是调用啊。就是直接呢,使用我们这个基本数据类型的这个变量是吧,然后呢,使用这个连接符就可以了。啊这呢,就咱们这个方式二啊行这呢讲了两种方式,大家呢,用哪个呢都可以。这是第二种啊。好,那么接下来的话呢,我们看它反过来的这样一个行为说呢,String呢,怎么转化成基本数类型或者是包装类,这个同样的我就写到这儿了啊。第二个。呃,在有一些场景下呢,我们还确实要用啊,刚才我提到过,比如我们在这个,呃,客户端这块呢,用户这个填写了很多的信息,发送给后台的时候呢,以后我们会讲啊,发送给后台,后台呢发送给客户端这块呢,我们都可以使用的叫杰森格式的这种数据。那杰森的话呢,是一个字符串了啊,本质上是一个特殊格式的字符串,然后传送过来的时候呢,我们这些数据呢,都可以认为是具体的字符串了,然后发送给后台的时候呢,用户呢,得这个我们后台这个程序呢,得把相应的这个啊数据呢,给它一个一个的获取出来,然后呢,你把它呢再写到对应的数据库里边。
06:08
比如用户呢,是想注册是吧,你把这个信息呢,在后台读到以后呢,把它写入到我们这个数据库里边,用户呢,下次想登录的时候呢,拿着用户名密码,那你把它到后台以后呢,获取用户名密码跟数据库的这个呢,校对一下,你看是不是一致。啊,一致的话呢,就要登录成功,不一致就登录失败了。相应的我们还有这种数据的一个加密的一个算法,OK,好,那么我们再把这个数据呢,发送给后台的时候呢,那读取到的呢,可能就都是字符串了,但是我们在存的时候呢,那你要是in的类型,那就是in的类型。所以我们需要呢,把词缀呢转化成对应的基本数据类型。这个操作呢,是大家啊要用到的。好,那这个事怎么去做呢?哎,我们说呢,还是前者转化成后者,就去后者里找方法。那基本数据类型也没方法呀。所以呢,我们只能找包装类了,所以这块啊,我们就哎调用。
07:00
哎,包装类的。啊,这个叫静态方法,这个方法叫什么呢?叫pass叉叉叉这样的方法。好来看一下啊,比如说这块呢,我们润啊S1这个是123,好,我现在想把它转换成是一个基本数列型。啊,怎么办呢?使用点叫pass,把往这一扔,然后加回车,哎,这就是int型的一个呢,就出来了。这个A呢,就是我们说的基本数据率先加个十啊,这都可以做运算的。哎,123。哎,这时候运算完以后呢,就是133。哎,没问题啊,好,这个我们再举一个例子。哎,String类型的S2这个来一个,比如说叫true。哎,就它了啊好,这呢,我们就调了一个布尔类型的了,第二叫帕布尔,把S2呢往这一扔。看一回车,这不就出来了。哎,就这样。啊,就这样啊好这呢,我就不举其他的例子了,这个特别的。
08:02
哎,是什么呀,就是你这个死人呢,不靠谱。比如这种我写个123A。现在你想把它转换成in的类型,这个事儿是不是就搞错了?对,这个我们来个pass啊,S3。然后我们再接收一下这个叫I2吧。啊这么着好,此时呢,我们去运行,显然呢,你这个A呢,这就转化不过来了,所以呢,它会报对应的这个异常信息啊,大家也关注一下叫啊exception。哎,这就错了。哎,报错。好,那么出来面向对象以后呢,咱们下一章呢,一上来就会讲叫异常处理了,那我们到目前为止呢,其实大家见到了一些相关的异常了,稍微的可以收集收集,看看都有哪些场景的啊。好,这呢我们就不行了,所以呢,大家在做这个转换的时候呢,这个你要小心一点啊,你得看看它是不是这个类型,有可能会报相关的,哎,这个错误信息啊,不一定都能转啊,就好比你这块写了个hello,你想转那个布尔类型,那肯定也报错。
09:02
啊,就行了。好,那么把这两个呢,咱们CTRLC一下啊,往这儿一放就可以了。哎,就这么着。诶,OK啊,咱们这一节的内容啊,其实就说完了,哎,通过这个练习呢,和这个前面真题呢,咱们再说一点小细节的问题啊,大体上的话呢,其实就这样了,大家需要下来掌握的点浓缩一下,就是它们三者之间的相互转换。转换的时候呢,使用的方法呢,你就记住我这里边儿红色的就行。自动装箱拆箱他俩的,然后呢,String呢,跟他俩之间转,我们刚才提到的两个方法。哎,记一下,包括这个连接符也行。那就可以了。好,那么关于包装类这个知识点呢,咱们就告一段落了,下面的话呢,我们来看下这个课后练习题啊,课后练习这块呢,我就留了一道题,这道题的话呢,其实似曾相识啊,来我们看下这个题面。说呢利用vector呢代替数组进行处理,说从键盘读入学生成绩啊,以负数呢代表输入结束,找出最高分,并输出学生的成绩的等级,为什么说呢叫似曾相识呢?我们在前面讲数组的时候,来我们找一下啊,我们讲这个一位数组,当时呢说一道题。
10:14
那应该是这道题了,回忆一下啊,当初的话呢,我们做数组的题目的时候呢,说有个这样的题目,先从那键盘读入学生的人数,我们写了个五,这样呢,我们就创建一个长度V5的一个int型的数组了,然后接着呢去变列这个数组的时候呢,我们从键盘依次呢调scanner获取几个啊in特型的数据放到我们这个数组里边。然后呢,我们再去记录一下这个数组的最最高分啊,也就是说最大值了,接着呢,再便利这个数组,看每一个成绩呢,跟最高分的一个差值,得到他们各自的等级。这个呢,就是咱们以前做的这道题,说现在的话呢,我们把它改写成了使用vector这样一个结构呢,去实现这个vector的话呢,是谁呢,就是我们后边要讲的一个集合框架中的一个类了。哎,把它关掉了。
11:00
啊,把这个收起来啊,就是呢,几合框架里边呢,我们涉及到一个类啊,其实呢就是个容器,当然这块呢,大家你不用去关注太多,这呢相关于啊,这个相应的呢,Vector的一些结构呢,在这块都以提示的方式呢给到大家了。为什么这块我们要用一下它呢?因为呢,它在啊作为一个容器哈,使用的时候啊,我们添加元素,包括呢,在获取元素这块呢,它都只能是啊放对象,所以这时候呢,你要是放学生成绩呢,作为基本数类型就放不进来了,我们只能是把它呢进行一个。包装是吧,或者叫装箱这样一个操作,然后呢,我们把这个呃成绩呢,从容器里边取出来的时候呢,那不好意思了,因为我放进去的时候呢,我认为是object了,所以我取的时候呢,认为呢也是object。但是现在的话呢,我们有必要呢,拿着每一个的这个实际上呢,是成绩了,跟咱们的最高分呢做个比较。或者说的话呢,我们得先能够啊,通过比较呢,拿到这个最高分,然后呢,再拿每个成绩呢,跟最高分呢去比较,看看到底差值是多少,我们还得要求这个等级了,也就是呢,针对于这种对象类型的这种数据呢,我们需要呢,进行这种比较,或者说呢,叫加减乘除的运算了,这个时候呢,我们就需要呢进行一个拆箱的操作。
12:15
啊,这呢就体现了我们装箱和拆箱这样的一个场景,这呢就是我们这道题目呢,需要练习的一个地方,好,那我们看看这个题目呢,怎么去做,整个的这个思路呢,其实跟原来呢还是一样的。啊,这块呢,我们首先啊,创建一个当前的一个题目啊,关于成绩的一个测试了。那就这样啊,那方法进来。好,那么我们原来呢,使用的是数组,一上来呢需要指定学生的人数,因为数组一个特点,所以呢,不管你是动态还是静态初始化,只要呢初始化它的长度就确定了,所以呢一上来呢,我们需要呢给定一个长度,但是对于我们这个啊,所以呢VR来讲呢,它有一个特点,你不需要呢告诉我它多长。啊,你看这里边儿提到这个点啊,这个呢,你就只管往里放就可以了。
13:00
比较方便一点,那只管往里放,这块呢,人家是一个类型了,所以呢,我们需要呢,首先要创建这个vector的对象啊,对应的这个需求呢,他也给到我们了。啊,直接呢,我们就把它呢,这个拿过来作为我们的第一步。这一步的话呢,就好比是原来的你造了一个数组一样。这个容器呢,就出现了,好这个有了以后呢,接下来哎,我们之前的话呢,是输入成绩了,那现在也是同样的道理啊。哎,这个我们就,哎从键盘。获取多个学生成绩。然后呢,存放到。哎,我们这个咱叫V了是吧,这个容器微重。啊,这就可以了,好,那这呢自然而然的就会涉及到循环,涉及到呢,Scanner这个使用了,啊这个我就写这个大方向了啊好,那么这块呢,循环到底循环多少次呢?这里边儿呢,题目有个要求说呢,你要输入负数的时候呢,代表输入结束。啊,这里有个这样的一个需求,再就是我们在获取学生成绩的时候呢,判断一下,如果你要是小于零呢,我们就直接呢,Break结束当前的循环结构啊就可以了。
14:07
好,那么这呢是我们往这个vector呃先这个呃,往这里边儿放这个数据的这样一个过程,然后呢,接下来的话呢,我们还得需要呢,去计算一下这个最高分啊。这个叫哎,获取学生成绩的最大值啊,就获取最高分,然后呢就完事了啊,接着呢,你把这个最高分呢,还可以去打印一下,对应的就是我们这个过程了,然后最后的话呢,我们再怎么办呢。需要呢,从我们当前这样一个容器当中呢,把每一个学生成绩呢都取出来,取出来以后呢,再跟这个最高分呢,做一个比较,判断一下他们的等级,然后并输出啊,这是我们最后一个环节啊。这个一次。获取啊V中的啊,每个学生成绩。然后呢与最高分。
15:00
啊,进行比较。获取学生等级。嗯,然后呢,并输出。哎,就可以了,好,这呢,就是我们整个这样的一个过程了。好了,在这个过程当中呢,我们需要用到相关的一些这种操作,这个操作的话呢,我们就直接呢到这儿来拿来用就可以了,啊相当于这块呢,算是一个叫信息给予题,虽然说我们没有讲这个外,这个类呢,到底怎么去使用,其实这块呢,无外乎呢,就是看看它这个类里边啊定义的什么样的结构。啊,或者这个类的话呢,我们先定义好,你先不用管它里边什么结构了,现在造个对象,然后呢,要想完成具体的功能呢,你看提供了哪些方法,直接你调方法就可以了。啊,就像星星给予体一样啊,好,这块我们就直接呢来去做这个实现了。首先第一步我们得把这个容器呢先造出来。哎,我就这样的创建好了。OK啊行,这是我们的第一步,然后第二步的话呢,我们需要呢,获取学生成绩呢,把它放在这个V里边,哎,这呢,我们需要使用这个scanner呢,所以提前把这个scanner呢,我们给它创建出来。
16:03
c.in。嗯,没问题,这个呢,因为多个包里边都有需要我们显示的,去指明一下啊U秀霞的这个写完以后的话呢,你呃,别忘了啊,所以呢,不妨你就先写出来,最后呢,把它做一个close。哎,我就先写出来了,好回过去SC有了以后,下边的话呢,我们需要呢,从键盘上获取多个学生成绩了,这块的话呢,因为没有指明说到底循环几次怎么写啊。哎,Y处。那这样或者的话呢,你写成这个。For的这种格式是不是也行?啊,这个就这样写啊也可以好,外交处这块呢,我们就获取个学生的成绩了,嗯,这呢我们就可以呢,先输出一下啊说请啊输入学生成绩是吧,来个冒号,然后呢,我们再把这个话呢,也CTRLC给大家放到这成绩的话呢,比如说就直接让他在后边写吧。这个括号的话呢,比如我们写到这儿啊。好,这块呢,光标呢,就在这个这一行的后边呢,去闪,你就写这个成绩就行,拿着我们这个scanner点掉这个next int,注意这呢是获取到的啊,先还是一个int型的值啊,我们叫int的一个膏吧。
17:14
好,那现在的话呢,我们需要呢,把它放到我们的这个容器里边,怎么放呢?回过来这呢,有个方法说呢,给这个向量呢,就是这个外呢,这要翻译的话呢,翻译成中文就叫做向量了啊哎,其实你也可以呢,就是说给veer是吧,添加元素,添加元素呢对应的方法呢,是这个方法。好,那么回过来,那我们就可以在这个位置啊,通过va点叫I的element。诶,大家看到呢,它的参数呢,是object类型。DYG呢,就是只能是放对象。啊,那现在呢,你是个基本数类型啊,按说呢是放不进来的,哎,怎么办呢,这个我们就需要呢,涉及到了一个叫装箱的操作了,将in的类型。哎,把它呢,装成我们的类型的这个对象。哎,怎么办呢?这个我们提到了,叫英特尔,有个方法叫value of。
18:02
不建议我们用过噪器了是吧,这我们把这个in这个scar呢,哎,这不往这一扔返回的啊,就是我们的包装类啊in enter的这个实例了。比如我这个就叫做scar。行,然后这个score的话呢,以多肽的方式呢,是不是就传到我们这个方法的行参位置了。哎,这个呢,我们就是添加数据。啊添加啊,学生成绩啊,到我们这个呃,容器。这个危重。那这就可以了,这呢叫装箱,其实呢,我们讲了自动装箱以后的话呢,就不用那么费劲了,是吧,其实呢,我们可以把整个这个事儿呢都注释一下,怎么办呢。我直接V点点ADD element,我把这个上面的叫Co,是不是直接往这一扔就行。哎,这呢,就是自动装箱。这个呢是我们GDK5.0之后呢,可以这样写。行,那距离我们现在呢,JDK17,这已经是非常遥远的事儿了,咱们JD8哈。
19:01
是2014年。那GDK5.0的话呢,你就往前去推,你想想这个相当长的时间了啊,马上GT8呢,都快十年了啊OK。所以呢,这个完全可以用,没问题啊。所以这块我们就简写了。那通过这样的一个操作呢,我们把它就放进来了,但是这块你要小心一点,输入的要是个负数的话呢,是不是也就放进来了。所以我们在添加的时候呢,最好你之前呢,是不是得先判断一下啊。哎,所以呢,就是如果啊,你这个in的score呢,是小于零的。直接咱就break了。就跳出我们当前这个Y循环了,那凡是能够走到这儿的,那它一定是大于等于零。那就是一顿添加就行了。好,那我们前面呢,讲这道题的时候呢,其实也说过啊,我们在添加的这个同时,其实就可以把这个最高分是不是顺带的就计算出来了。所以我把这个操作呢,就写到我们这个循环里边了啊。好,那么这个最高分的话呢,显然需要拿一个变量呢去定义,那不妨我们就写到这儿了,成绩嘛,我们就用in的行了啊,叫max的一个score。
20:00
这个呢,怎么写?这个你说拿第一个赋值,第一个还没有呢,是吧,所以这块我们就先写个零吧。相当于呢,在你有效的范围内呢,我们先取一个最小值啊,先用个零呢去表示,用它呢来去记录最高分,好,然后呢,每一个学生成绩呢,就是这个scoll了,我们在这儿呢,可以做相关的这种判断哈,说如果你发现所谓的这个masco呢,是小于你传入的这个叫SCO,那我们呢,就拿你这个。传进来的这个新的值呢,去替换我们这个所谓的max score,这个没问题吧。OK啊好,那么这个循环呢,结束的时候,也就我们这个break呢,执行的时候,整个呢,我们这个数据呢,就添加到这个容器里了,最高分呢也算出来了,接着我们就开始走下一步了。好,走到这儿了啊,这一步的话呢,就要便利一下每个学生成绩ug呢,我们要从这个容器里边呢,把每一个成绩呢都取出来,怎么取回过去看一下,取出咱们当前VE中的元素,用的是这个方法叫element at。
21:03
爱在后边呢,写的是索引。啊,其实啊,咱们这个外壳呢,它的底层啊,用的还是数组,只不过呢,是把这个数组呢给封装起来,放在一个类里边呢去体现了,所以这块呢,哎,我这写个零,其实还是调你数组角标零的位置了。那到底有多少个元素供我们去调呢?原来呢我们是用速度点LA,现在呢是用v.size。这块就取你到底里边放了几个OK,好,那么我们再拉回来,那此时的话呢,我们就写个发完了啊。这个。In的一个I呢,从零开始,I呢就小于。是不是点塞啦。就是你有几个啊,然后I呢加加一下。哎,这么着好了,然后接着的话,我们通过V点,刚才叫element。哎,就是这嘛,把这个A呢放进去,我们就把这个元素呢给它取出来了。诶注意啊,我们放的时候呢,认为你放的是一个object嘛。
22:00
啊,这会大家看的话呢,看到这个E哈,这个呢,其实是我们后边要讲的这个泛型了啊,这时候呢,大家先把这个E呢,就看作是object了。因为你放进去是object,所以我们这块取的时候呢,它也认为是一个了,所以你看光标往这放,我们alt回车一下自动生成的,你看就是它。哎就成它了,但是我们接下来呢,要哎拿着这个成绩呢,跟max score呢去比较大小了啊,你是差十分啊差20分啊是吧,这个时候的话呢,我们不能够拿着对象呢去减去这个被这个最高分去减了,而且还想算哎差多少是吧,必须呢,是不是要拆箱。对,这个就是我们这个叫哎拆箱这个操作。嗯,这块呢,还不是啊,接下来我们拿着它,嗯,先拆这咋弄。对西安是不是啊。啊,这个我们叫T啊,这个叫直接叫。啊,叫inte吧,这样。啊的一个高。
23:00
哎,先这么着是吧。这写错了啊。好这块呢,我们直接alt加回车啊,先做一个这样的强转,然后的话呢,这只是一个强转,这其实还不算拆箱啊,真正的拆箱的话呢,其实是我们接下来的这个操作。哎,我们int型的一个叫当前的score,哎,你拿你这个这个score,哎这么着操作,诶不能这么着了,拿着它呢,是不是叫value int value是吧。调离方法呢,实现了,这个叫拆箱了。好,这个呢,是这个5.0之前啊,咱们这样呢,去做一个实现。啊,那现在的话呢,其实就更方便一些了哈,更方便的,其实我们把。嗯,这两行呢,我都注释一下吧。哎,我就把这两个呢,就直接合合到一起得了啊,比如说这块。咱们刚才的这块呢,其实是做一个向下转型了啊,得到inte我就别写了,我就直接这么着。哎,先呢,把你转换成是一个,然后自动的就拆箱成我们这个高了。
24:02
哎,把他俩就合并了一下啊OK。那我这呢,就直接这样去实现了啊,上面这个呢,你可以列解成算式叫这个方式一是吧,这个是我们的这个方式二。嗯,得到这个成绩以后呢,我们上面这个最高分也有了,我们就可以呢去计算这个差值了,这个跟原来还是一样的啊,对应的这种等级。啊,回过来,那我们就做这个具体的判断了,那如果这个max score呢,减去你这个所谓的score呢,是在十分以内的是吧。啊,这个呢,就是一个A档,这个呢,咱们前面做的时候呢,是不是还记录了一个变量啊。这个变量呢,我们写到。先写这儿吧。类型的这个我们叫一个grade,这个呢,就是它的一个具体的level啊。这个level呢,比如我就先这么着一下。先摆到这儿啊,这里边儿呢,必须得写个东西,我就先整个空格吧。啊,如果是这种情况呢,就是A级的。Else if。
25:01
啊,这个呢,是在20分以内的。这个是B档啊,以此类推。30分以内的。这个就是C的啊,最后呢,Else。这个啊,就是D档。哎,这样就可以了,好,然后这个呢,就是它的这个等级我们就确定了,确定以后呢,我们在这个位置。直接呢,打印每个学生的成绩和他的等级,就是这个写法。那一号啊叫student谁是吧,加上一个I。空格一下啊,Score is。哎,加上你这个叫是吧。好,然后呢,Grid。啊,Is,哎,加上我们这个grade。这样就可以了。诶没啥问题啊,行,最后呢,你把它close一下就行,好,这个呢,就是我们这道题的一个实现了啊嗯,这里边这个小细节呢,就是这个位置啊,但是你看我要把它删掉呢,是不是是不是也可以。
26:03
因为呢,就是我们这个grade呢,按说你这块掉了掉之前你不得赋值吗?怎么没赋值呢。哎,我这呢,是不是写的if else if和else啊,尤其呢,注意这个else就是你上面这个要没付的话呢,我else兜底了。也就是说呢,我们这个群这个分支结构执行完以后的话呢,一定会附上值的。对啊,如果说要是没有这个else,或者说这里边儿没有去赋值,它就会报错了。哎,这个注意一下是吧,就是你确保呢,一定会赋个值就行。好,这块注意一下啊。行,这个呢,我们就写完了啊,写完以后呢,咱们就可以呢,做这样的一个测试啊,Run起来。嗯,可以了啊,说请输入学生的成绩,这个咱们就。在这写吧。哎,五十六一个八八。有时。23分啊,负九这样啊,写复数的时候呢,它就结束了。这儿一共呢,我们是写了1234啊四个这个成绩,然后对应的这个等级啊,就列出来了。
27:05
没啥问题吧,哦,没有说那个最高分是多少是吧。在这块我们补一下啊。哎,最高分哎冒号哎,加上我们这个max score啊,这样就行啊,这个你可以在诶写错位置了啊。CTRLX应该放到我们的这边是吧。来写到这儿啊。好,这个呢,我们稍微再再测一下啊,六十七八十九九十啊67来一个12分啊,再来一个负九啊,负九呢就不计算了啊好,最高分呢90分,哎,这是对应的这个等级。没啥问题。行,这里边儿呢,主要呢,大家就体会一下,我们这个叫装箱和拆箱的事儿啊,关注一下就可以了啊,这个我们就过了啊,然后接着的话呢,我们来看一下这个真题啊,真题里边呢,有几个小问题呢,我们还是有必要给大家去说一下的。
28:00
首先呢,来看第一道题。这道题的话呢,你看这样啊,我这呢是new integer,造德对象,道德对象问I和街等等。这个呢,我把它给注入掉了。啊,因为呢,我感觉呢,这个在问大家呢,有点侮辱你智商是吧。除法三。False是吧,俩对象嘛,问地址肯定false呗。没问题啊,好,看下边这个。这个就有意思了。说呢,这是自动装箱哈。自动装箱里边是咋做的呢?啊,所以咱们那会儿看过那个磁解码的那个指令了,它其实调的那个叫Y625是吧?OK啊V65是干啥的呢,咱们其实就不清楚了啊总之的话呢,它这个自动装修完以后呢,是俩对象了,问这俩对象呢是不是等等。啊,这个呢,我们可能感觉这不就是false嘛,是吧,俩对象是不是应该是false呢,心里边其实有点忐忑的啊,然后紧跟着的话呢,你会发现呢,它又出了个128。这时候呢,你要是稍微的聪明一点的话,你会想一都是false,这128能有什么特别呢?
29:06
为什么又再考一遍呢?然后呢,怀着谈谈的心呢,就也写了个false是吧?哎,然后实际运行的时候发现还真不是这么回事儿。来,你看这块我做一个执行。这块呢,第一个false真没问题,然后下边这两个时候,你发现第一个呢,竟然是处啊。下边这个是false。这个有点诡异,就。啊,这呢,就是在笔试当中,甚至有的时候呢,就面试,他就是当面来问你想看看你的这个表情是什么样子的是吧。啊,这块我们该怎么去理解呢。哎,这块啊,首先的话呢,我们先要明确一点,刚才我们看到了啊,这样的写法也好,这样写法也好,它其实底层。哎,都会调用。哎,咱们刚才看到的啊,叫inte的是不是叫value of这样一个方法。
30:00
我们现在其实关注的就是这个方法里边它到底是怎么做的是吧。OK啊,那如果大家你要不知道这个事儿的话呢,你怎么做呢。你说这个是出这个false,现在呢,假设呢,你想解释一下你怎么办。其实也没啥好办法,只能是百度上搜一搜是吧,所以你看看别人都是咋解释这个事儿呢,为啥呀?哎,其实你要找的话呢,也能够找到相应的一些解决方案啊,他的一些解释,诶所以说呢,大家平时遇到一些问题的时候呢,除了咱们现在学习期间啊,你问同学啊,问老师啊,这都没问题,另外一方面呢,其实也要锻炼自己这个自己解决问题的这样一个能力,其实呢,它是很重要的,因为以后你在开发当中啊,你会遇到各种各样的场景。啊,你不能遇,遇到问题你就问你同事啊,问你这个项目经理,问多了以后,他会就怀疑你这小伙行不行是吧。也就是说在开发当中啊,其实需要具备的一种能力呢,就是自我学习的能力哈,这个呢,其实还是蛮重要的。只不过呢,咱们现在呢,在商务呢,大家学习这六个月呢,其实学习强度呢是非常大的。
31:00
啊,更多的有点像这种一直在往里边灌这个知识一样是吧。啊,你觉觉得今天呢,你看稍微的感觉还行,结果呢,第二天又是新的知识,每天都是这个新的知识强度呢,其实是挺大的啊。啊,你要让我现在跟大家一样坐到这儿去学。当然比大家年龄大一些啊,我都担心怕我坚持不住啊,哎,但是大家呢,在这个年龄了,那没办法是吧。呃,当然呢,想说的是什么问题呢?就是在工作当中啊,其实要锻炼这种自己思考,自己解决问题的这种能力哈,哎,那么其中的一个小的体现呢,就是遇到问题的时候呢,你要想找到这种解决方案怎么办啊,你的各种身边的这些工具,包括呢,你这些同学啊等等,都可以作为你的一种媒介哈,去解决。好,那么这块呢,我们怎么去理解呢?哎,你要是不知道呢,我们看词解码文件这个事儿,那其实呢,你就得是。百度去搜了,而且呢,百度呢,也一定会有人找到相应的一些方案跟你说的,也就是说呢,大家现在呢,就遇到一些问题,你去百度的时候呢,你说我没有找到解决方案,其实只有一种可能性。
32:02
就是你搜的不太靠谱。对啊,就是现在呢,咱们学的这个知识呢,这都不是多么前沿的知识了,是吧,你说前沿的知识别人呢,都没有出现过,比如说新出了spring的一个框架了啊,你呢,第一个去尝鲜的,然后呢,导致呢,他有他本身呢就有一些bug,然后你呃提前发现了,你说别人咋解决的,哎,发现没有一些解决方案,就这时候你应该高兴。你终于有机会呢,去表现自己一把是吧?哎,你把相应的一些问题,包括一些bug你提交一下。你比如说像这个弗Li格,咱们的一个大数据的老师,那个叫左源老师是吧?呃,这个弗Li格呢,新出一个版本的时候呢,他就开始看这个源码,然后呢,发现里边有几个bug,他就提交了,提交以后呢,诶,官方就给他一个认证,就属于这个源码贡献者是吧。对,大家呢,也都可以这样去做的,没有问题啊,嗯,OK,嗯,那如果说呢,呃,相应的这个框架呢,已经算是比较成熟了,你出现了一些问题,那么相对应的网上一定会有人去提到相关的一些解决方案啊,你说你没找着,只能说你搜的不太靠谱,所以说呢,你会用百度也绝对是你能力的一个体现啊。
33:06
这里我说的是以百度为代表的一些相关的平台,不一定真的是百度啊。好,这个呢,我们拉回来啊,那如果说呢,你要是嗯。不知道呢,最起码文件那你就百度了,呃,你要知道的话呢,相当于就是百度的那些人,他咋知道呢?诶那我们来看一下。他也是百度的啊,那总得有个头吧,是吧,好,那这块怎么做呢?刚才我把这个程序也跑过了啊,所以呢,就有对应的自解码文件了,所以我们就可以呢,直接来看一下我们这样的一个字节码啊好在这个位置呢,我们就找到。现在要看的是没方法是吧。看这个扣的啊,扣的里边呢,其实我们主要关心的就是后边这块啊。前面这块呢,就扭对象这没啥可说的,在后边这块呢,你可能会说,哎呀,这有点挡着我眼睛了,就看不清楚到底在哪了,是吧,这个呢,你可以呢,把上边这个给他注释一下啊。哎,我这呢就不去做这个注释了,其实呢,我们就直接找咱们要找的那个位置了,其实就在这块了。
34:02
啊在这块啊,因为提前我们能看到啊,它对应的这个数呢,是一是吧,这个呢,不就是常量一嘛,这个是常量一,其实就是我们取的这个一的这个数。OK啊行,后边这个呢,不是有128吗?啊,这不就128了,这不128了,你看调的还是这个方法。还是这个方法,哎,上面也一样啊,这个你取的是呃,这个一的,这个是不是这个一是吧,这个是一是不是也是调这个Y6这个方法了吗。没问题啊行,那么这儿呢,我们就看到这个value这个方法了,你知道呢,这个所谓的自动装箱其实呢,还是调的value,那我们现在其实关心的就是Y5它到底怎么做的CTRLN。这个呢,我们就写入。然后呢,看源码这个看哪个其实版本都行啊,然后呢,过来以后的话呢,再CTRL f12,我们就找这个叫Y6O。哎,这个呢,就找到第一个方法了,好这个位置呢,我们传进来的可能是个一,也可能是个128,看他怎么做的啊,说如果呢,你这个I呢,大于等于开点漏,并且呢,小于等于它点氦漏是多少漏呢?是负的二八氦呢。
35:11
那氦的话呢,它这里边呢,其实进行过这个赋值操作哈,这个赋值的话呢,它是拿这个所谓的H去负的值,H呢往前一找。HH在哪?对,在这儿呢是吧。嗯,哎,这儿他拿这个它俩里边这个较小值呢去获取的,其实这个呢,就是我们上面这个这个呢,就是它俩中的较大值。啊,这又有一个啊在这儿呢是吧,在这儿有一个这个具体的负值了,所以呢,它呢,其实就是127,也就是说呢,当我们啊,再回过来这个I的范围呢,在负的128在到正的127范围内的时候呢,它就是直接从一看呢,是一个现有的数组里取的。哎,这块呢,其实就出在这个结论了啊,在负的128到正的127这个范围内啊,注意这是一个闭区间啊,它呢是从一个现有的数字当中取的,如果你要不在这个范围内,比如我们刚才那不是还比过128吗?
36:06
他就没有进这个依附结构,相当于就是重新new的对象。所以呢,128这个事儿呢,我们就解决了啊,哎,我们回到刚才这个题目这块。就是这个啊,相当于是不是用的俩对象。那自然而然的话呢,两个对象呢,它的地址呢,就是false了,那上边这块呢,它是处啊,那为什么呢,还回过去看啊,这块呢,它是从信仰的这个数组里边取的,哎,这个数组的话呢,它其实就维护了一个。啊,这个呢是127减去负的128,那就是加上的128,再加上个一,其实呢就是256,这就我们这个数度的一个长度,它呢从这个接的话呢,就接加加接加加,一开始这个叫负的128了,是先赋值后加加,所以说这个数组里边的。啊,第一个值呢,是负的128,然后通过一个for循环的方式呢,依次呢,到这个127,也就是呢,只要呢,我们给这个in负的这个值是负的128到正的二七范围内的话呢,我都是从现有的这个数组当中去取的现长的这个数据。
37:09
而线程这个数据呢,每一个位置呢,它都是一个的对象。所以呢,我们这里边取的时候呢,我这写的是一,它取的都是那个数组当中,哎,我们已经好的那个in,然后它里边值是一的那个位置了。所以说的话呢,你这俩用的其实就是同一个对象啊,所以呢,它的地址呢,就是相同的。哎,那么大家接着去想一下,这样做的好处是什么?啊,有同学说是快啊,因为呢,你不用用了,直接拿过来用是吧,另外一方面的话呢,是不是也节省内存空间啊。因为呢,我们在平时用这个特的时候呢,发现呢,我们在负力128啊到正地127这个范围内呢,其实我们用的场景呢是比较多的,只要你使用的时候呢,我就直接呢拿现成这个对象呢给你就得了,用不着每次呢都去拗一个了。这样的话就节省空间了,当然有同学担心说,哎,你俩呢,都指向这个位置了,那万一要我其中这个N呢,我改成二了,那怎么办呢?改成二了,你就指逆后一个。
38:03
哎,你不要影响前面这个值。啊,就这样。啊,实际上呢,这块呢,也是一种设计模式啊,这种设计模式呢,就称为呢叫想圆的设计模式。享共享是吧,就是呢,你把一些呃,大家呢,都可以去使用那些啊公共的数据呢,我就放到一个结构里边了,然后呢,谁要用呢,直接拿过来去使用就可以了。就是想园的这种设计模式啊。行,这个我就说清楚了,这个呢,在笔试面试当中呢,考的是比较多的。啊,那这个要考的话呢,咱们顺带着给大家再多讲点东西啊,就是万一他要不考这哥们了呢。因为这个建的比较多了是吧,我们再扩展扩展啊,就除了这个之外呢,发现呢,还有这些。包括这些,他们其实都使用了这种响面的设计模式,也就是说啊,我把这个in我要改成BAT了。同样的道理。两个Y都是一等等的话呢,其实也是出都变成128了,也是false。
39:03
啊。他们这几个呢,都是负的128到正的二七范围内,Character这是字符串啊,哎,字符它呢是零到127范围或类型的话呢,只有这俩值。就是这些的话呢,如果我们去啊,用这种自动装箱的方式呢,只要是在这个范围内的用等等判断呢,全都是出啊出了这范围呢,是false,他俩的话呢,就没有了,因为这个带小数点呢,这个没法给你去指定啊。行这块大家呢,注意一下。啊过了啊好看第二个啊。第二个呢,你看是这样的。In一个I double一个D,这个呢,我也给阻止掉了,因为呢,怕显得侮辱你是吧。这这吧。没有任何问题是吧,那这个呢。哎,这个呢,我也注释掉了,这个不是怕侮辱你,这个是因为他会报错是吧。啊,这个理解为啥吧。
40:00
对。对,咱们在这个Java里边呢,就是这个等等呢,是能够比较引用类型的比较地址,但是前提呢,就是这两个类型呢,得。要么相同,要么呢,你是这种子父类的关系。哎,这样才行,他俩呢就是完全并列的两个类,这个double呢是集成number的呢,也是集成number的,相number的两个并列的子类没有任何关系,编译的时候呢都过不了,哎,所以这个呢是叫编译报错的啊,哎,这个我就注释了。好,看下边啊。说那我这是一个。我这是一个double。都是1000问等等。这个位置的话呢,其实最先想问的就是说这块会不会报错啊,哎,这块我也忘了朱市长啊,你也明显能看到没有报错。那说明呢,是可以兼容的。那就说明了他应该是有过,你说这他应该是装箱还是拆箱。那肯定拆箱了,因为他要装箱的话呢,那就会出现上面这个情况了是吧。因为装的话呢,不就得把double装成这个double吗?那他就明显报错了。
41:02
那他就没有这样做,那肯定是拆想了,拆完以后呢,就是两个基本数类型比就没事了,所以呢,从这个角度出发的话呢,把它呢,拆成一个int类型1000,那他俩再去比,这个是不是应该就是除了。哎,这个呢就很好理解了啊行,这呢是我们说的这样的一个问题,但可能你会去想,明明呢,他也可以考虑去装想。那为什么他拆箱呢?啊,装修怎么着?装了没法比了,那就报错呗。对吧,按说也合情合理呀。哎,这块呢,其实说白了,这就是咱们人的设计嘛,是吧,我设计它的时候呢,你有这个包装类,有基本数据类型,哎,你说是装还是拆呢,它优先选择拆了。啊,这就是人的设计啊,你可以理解成是一种规定,那你要再想一下,他为什么要这样规定啊,不装反而拆呢?因为拆的成本低啊。你想我们这是一个对象,你把它拆成基本数据类型去比,是不是速度上也更快一些,你要引用数据类型的话呢,还得把它包装成是个对象了,这个成本不就更高一些?
42:10
你可以这样去想,包括下边这个,你看这个位置的话呢,是一个真的是一个in类型啊,他俩去比的时候呢,你说我是拆还是装啊。肯定是拆啊,所以这块呢,也是一个出。哎,你要是装的话呢,你就相当于是它就提升成一个TE了,刚才我们也看到了,超出了负的128到正的二七范围,是不是这就意味着是新创建的对象了。你要这样比的话呢,是不是就成了一个false了。啊对啊好,所以这个题目的话呢,我们现有的去做一个run啊。哎,这个结果呢,你发现呢,你看下边这两个,这不都是。哎,这都是出,哎上面我都注释了啊,没问题,好这呢,就我们说的这样的两个题目,然后呢,大家也可以怎么着呢,我们看一看这里边儿的资金码文件。看这个方法对吧,找这没方法,看这个扣的在这儿呢,其实你也能够看得到,找这个1000的这个位置是不是就在。
43:04
哎,这块左右了,是不是就1000了是吧,然后在这块的时候呢,我们去看一看它是怎么去处理下边这个操作的,呃,这里边我们找一下啊。嗯,这是1000了,你看这个呢,它调的这叫Y625,这个Y6O的调用呢,是因为你这块写的,它是先得有个自动装箱是吧。装箱的时候呢,它这边用的是这个value o的这个操作,先装箱起来啊,然后下边呢,是你这个呃,Double类型的这样一个数据,然后我们下边去调这样的一个方法,然后大家你会看到这个操作。这个操作呢,其实在进行的就是我们这个拆箱的一个行为。把它拆成是一个基本数据类型的嘛。然后这块你看还有一个呢,叫I to d,这个I呢,就是in的类型呢,就是转换为to,就是我们英语里边这个to了是吧。然后呢,这个D呢就是double嘛,相当于就是我们这呢是一个int类型,这呢是一个double类型,我呢有个自动类型提升,把这个int类型转换成是double了,在这呢,你看也能看得到。
44:01
OK啊好,然后再往下的话呢,这两个这两个呢,首先第一个呢,它也有一个自动的装箱的行为。所以呢,你看这呢,是我们第一开始这个1000啊。就是这个1000。这个以前的话呢,现在一个自动装箱,这不是还是掉了一个叫value o了吗?没问题,这呢是你第二个这个以前就是这个以前啊没问题,好,然后接下来再去比的时候呢,是不是也是一个拆箱的行为,这不就看到了吗?所以呢都非常的清楚,OK,好,这呢是我们对应的这个,呃,第二个题,然后接着来看这个第三个题。第三题的话呢,这个也有点意思啊,这样的说到我这儿呢,是一个三运算符,那呢是个处吗?哎,如果要是处的话呢,我们这块就执行它,如果是false执它显然这块已经是个处了,所以呢,返回的其实就是它了。那么这个返回的时候呢,你发现这个结果呢,它并不是一哈。他打印的结果呢,是叫1.0。啊是1.0相当于呢,哎,我们说这两个类型呢,它得有个兼容啊,这个兼容的时候呢,这不就我们讲三星三伏的时候提到过这个事儿吗?哎,那其实这里边呢,就把这个呢,相当于还是转化成相应的double类型。
45:08
啊,这个稍微注意一点,而我们如果使用这种if else去写的时候,这呢写个出啊,显然呢,就指引了它了,这个打印的结果呢,就是。一是吧,这有个小细节的不一样啊,这不也看到了,这个就是一啊,没问题,好,这呢就是我们对应的这个课后的练习题啊,大家呢,熟悉熟悉就行,主要的重点呢,还是需要关注于基本设类型,包装类,包括string它们三者之间的转换啊就可以了。
我来说两句