00:01
嗯,好了,老铁们,咱们开始上课了啊,首先呢,我们先回顾一下我们昨天的这个内容啊,回顾的话这块我们把这个叫D06的课堂笔记打开。打开这个课堂笔记,我们看一眼啊,其实昨天啊,我们最主要讲的是关于这个数据类型这一块,但是我们还没有讲完,对吧。大致的回顾一下吧,首先数据类型这个东西呢,面试官问你的话,问你什么呀,就是你怎么理解这个数据类型的,你该怎么答呀?哎,那你就告诉他,数据类型不同,分配空间大小不一样。啊,这是第一点啊,根据不同的数据类型分配的空间不一样,有的占四个字节,有的占八个字节啊。第二点呢,要注意面试官问你Java语言当中啊,它的数据类型。啊,有八种。基本数据类型啊,这是基本数据类型,还有什么呀,另外一种叫做引用数据类型啊,你要这么去答,嗯,之前呢,我有同学啊,我有同学或者学生啊,这个呢去找工作,然后呢,面试官问了个问题啊,让他这个。
01:04
一下就懵了啊,问他啥呢?问他这个Java有八种基本数据类型都是啥?啊,他说be short long对吧,哎,说着说着最后有一个没说上来,就是谁呀,差点没说上来,呃,这个不应该啊,不应该,因为呢,这是程序员的一个基本的素养啊,就是说八种基本数据类型必须得记住,你可能不是说每一个类型你都用得上。但是呢,你得记住。啊,所以这种问题的话来的太突然啊,太兴奋是吧?哎呀,这个题很简单,突然之间念着念着念着读着读着是吧?哎,八个怎么数也数不够啊,最后所以呢,按照这个口诀,空间大小,那么bad short in是整数型,Double是浮点型带小数的,然后布尔类型是false啊,其中这些类型啊。
02:00
都是数字底层,底层是数字二进制与十进制之间本身有一种自然的转换算法,所以计算机表示起来很容易,但是这种差计算机表示起来很困难,差呢,它表示起来很困难,是因为我们差是文字,文字每一个国家都不一样,所以说呢,我们文字这块转换的时候啊,哎,就需要一个特殊的东西存在,而这个东西呢,叫做字符编码,对不对?哎,字符编码是什么呀?是人为的某一个机构或者是某一个组织,人为的定义好的一套什么呀,对照表,一套转换规则啊,在这个规则上明了我们某一个文字对应的二进制码是什么。对吧,哎,有这样一个规则。所以紧接着在下呢,我们就说了一下这个关于字符编码这个东西啊,那么字符编码这个呢,发展史要知道其中有一个呢,叫做ask码。这个呢,实际上是早期的一种编码方式,只支持英文的编码方式,那么其中小A97,大A650时48啊,然后ISO8859杠一这种字符编码方式呢,又被称为拉丁一,这叫国际标准组织制定的国标码,那么这个呢,仍然不支持中文的啊,然后GB231GBK和GB18030,后期的这个发展才支持了简体中文BIG5大五码是支持繁体中文的,是我们Java语言采用的一种编码方式,所以Java语言啊,它可以支持什么呀?
03:25
各国的语言啊,可以支持各国的语言是没有任何问题的啊。好了,那这是我们的字符编码,大家呢,要知道字符编码呀,它呢其实有一个非常重要的东西在里边,就是乱码,那么乱码这种东西是怎么诞生的,或者怎么产生的呢?是因为我们编码与解码的过程啊,采用的不是同一套字符编码,你比如说我们采用我们的GB2312进行编码,然后呢,采用什么呀,我们的B5进行解码,那么编的时候采用这个编,解的时候采用这个解啊,那就会出严重的问题啊,严重的问题乱码了,行,这个呢先简单作为一个了解啊,然后呢,我们在上面就说了一下,二进制与十进制之间的换算,这个呢,大家如果不会的话,没关系啊,不用太紧张,这个呢,使用我们的计算器也是可以进行转换的,呃,我在这里强调一下,大家呢,没必要说做学术型研究啊,做Java开发,其实没必要说了解计算机底层啊,怎么着怎么着的啊,没必要没用。
04:27
因为以后的开发用不上,用不着你花那个时间去研究这个干什么啊,对不对,所以说呢啊这块的话就不要花费太多时间去研究它啊,没有意义啊没有意义,当然如果说你有时间的话,有经力的话,你可以研究一下啊,那么在我们的八种基本数据类型当中啊,有几个取值范围需要各位记住啊,BAT是负的一百二八到正的127 short是什么呢?是32768~32767,然后呢,Int是2147483648~2147483647 char呢是零到6535,但是你要注意,叉和short实际上是表示的种类数量是一样的,都是65536个啊,6536个。
05:05
32768乘以二就是6536啊,65536,所以说short和差,其实它们表示的种类相同,只不过差可以表示更大的正整数,因为差是文字,它不存在负数这一说啊,复数这一说。那么在我们后面呢,我们就开始对这八种基本数据类型进行逐一攻破,首先第一个我们讲的什么呀,字符型,那么字符型这块呢,我们写了什么代码呢,就写了这样一个代码。这个代码呢,其实最主要是告诉大家,我们在Java源中字符啊,用单引号给它括起来,然后呢,字符这块呢,可以用,可以存储一个汉字,没有任何问题啊,因为一个汉字占用两个字节,差实占有两个字节。那么这个之所以不行,是因为类型不兼容,是因为后面是字符串,前面呢类型是字符型啊,类型不兼容,像这个呢,实际上是说呀,我们单引号里边只能放一个字符,不能放串,这个同样也是这个道理,单引号里边只能放几个字符啊,放一个字符啊,不能放这个字符串啊,不能放字符串,那么C3等于零,这个零和数字零是有很大的一个区别的啊,注意这个零实际上对应的是48,我不知道大家还记不记得零字符对应的一个ask码是48,然后呢,如果你单纯就是写一个数字零的话,这个数字零啊,其实就是零了,零和48是不一样的啊。
06:30
这个大家要了解。第二个呢,哎,在这里呢,我们又写了一个例子,这个例子最主要给大家讲解的是关于Java语言当中的转义字符,大家能记住这几个就可以啊,杠T联合起来是制表符,然后呢,还有一个就是杠N是联合起来是换行符,然后呢,再往下呢,哎,我们有一个斜杠,单引号表示普通的单引号字符,两个斜杠表示一个普通的斜杠字符。啊,然后呢,里边跟上双引号,如果是中文的话,没有任何问题啊,如果你是英文的话,你需要加转译,但是大家要记住,这个转移斜杠不是对前面这个字符进行转移,斜杠出现的作用其实就是对后面这个字符进行转移,这个斜杠只是对后面这个字符起作用。
07:19
啊,那么像这种情况,如果双引号里边加一个单引号的话,诶,那这个呢就不需要转移了,因为这个呢会自动和这个进行匹配,配成一对。但是如果你采用这种方式,那肯定是不行的,这种方式的话,那么我们这个呢,就会自然和它进行匹配一对儿,那么后边这个就是个废物啊,下面这个同样也不行,这个呢会自动和这个进行匹配,这个就是个废物,所以这样呢,我们肯定是不行的,怎么办?加上斜杠进行转移就可以了,我们可以在这个地方哎,前边加一个斜杠,我们可以在这个位置的前边对吧,加一个斜杠,那么同学问了这个问题,这样行不行,没问题啊,因为双引号开始到双引号结束,整个这块,他会认为整个里边是一个什么呀,字符串啊,会认为是一个字串,会把它当做一个字串字符串字符串字符串字符串啊是这样,然后呢,还有我们昨天呢,说了一个叫杠U的事儿啊,斜杠U呢,后边这一串的东西大家呢,要有个印象啊,这个实际上是我们文字所对应的unicode的编码啊,它是一个16进制的方式进行表示的,那16进制的在这里呢,给大家列了一下啊。
08:25
那这就是关于我们字符型这块的啊,字符型这块,然后呢,接下来再往下的话,我们就开始讲一讲这个整数型这块的内容了,那么整数型首先第一个例子讲解的是我们呀,在我们伽va圆中啊,整数型有四个bad short in 1248啊然后呢,这边有个取值范围要注意一个字节一个BY是一,是八个比特位啊,一个字节是八个二级之位,这个事儿呢,我强调很多遍了,那另外呢,我们啊,在我们Java圆当中啊,写这个十整数这一块,我们有四种表示方法啊,一种表示方法啊,就是我们自然的十进制,还有一种是零开始的话,逆零开始话,那后这啊它就是八进制啊,如果你零开始的话,那么后边这啊就是按照16进制来进行的,如果是你0B开始后边这啊,其实就是二进制码的,但是这个呢,注意第一版本呢,它是不支持的JDK8之后呢,才有了这个特性啊,才有了这个特性,行,这是这个例子第二个。
09:26
这例子我们讲的是关于什么呢?我们来看一下,在我们Java语言当中啊,有一条非常非常重要的结论,这个结论是什么呢?是我们的整数型字变量,在我们Java语言当中默认被当做int类型,就是说。前面我们说了这几个里边哪个最常用的,哎,其实in是最常用,In是最常用的啊,然后呢,我们没必要去斤斤计较,说在开发的时候,我们用这个还是用这个更省一点,还是用这个还是用这个,其实大部分都是用in的,所以在Java语言当中啊,它默认啊这种字面量,只要你写出来。
10:04
你后面不加L的话,它认啊,就会把这个数字啊当一个类型四个字节来给你处理了,那么像这种情况就不存在类型转换,In类型付给in类型,那这个是in类型付给浪类型,我们叫小容量付给大容量,小容量覆盖大容量的叫自动类型转换啊,然后呢,如果是后面加了一个L,那就表示整体它是一个什么呀?浪类型的数据付给浪类型,它其实没有类型转换啊,没没有类型转换,那么下面这个呢,2147483647付给我们的浪类型十。自动类型转换,因为它是int类型,四个字节类型是八个字节,小容量覆盖大容量啊,然后再往下呢。我们在这里加了一个2147483648,结果呢,我们这块编译报错了,错误是整数太大了啊,原因是不是我们的浪类型的异变量存不下你这个数据啊,是因为啊,你本身这个数据上来,它会默认当做四个字节来处理,当做int类型来处理,因为你后边没有L,那么这个时候呢,它会给这个数据分配四个字节的空间,结果在分配的时候呢,就会出问题啊,说你这个已经超出了一个int类型的一个范围,其实就是整数太大了啊,所以怎么解决这个问题,后面加一个M就可以了,那么紧接着呢,咱们除了这个例子之外呢,再往下呢,我们看看第三个例子,我们讲了什么?第三个例子啊,其实我们最主要给大家聊了一个东西,叫强制类型转换,那么我不知道大家是否还记得我们强制类型转换这个东西,其实是大容量往这个小容量转换。
11:36
啊,大容量往小容量,比如说类型X它是类型,现在是类型的Y,把X给Y直接不上去的,你把这块删掉是不行的,你按照这种方式不行,编译器会报错,编译器会报,编译器一看到X它是类型八个字,类型Y是四个大容量,不能够直接这种八给了这个小容量啊,那么这个时候呢,就要求我们程宣干什么呢。
12:02
还要求我们这个程序员有意识的,有意识的啊,在有意识的情况下,我们程序员手动的前面加一个强制类型转换符,那么加上这个符号之后,编译器同意了吗?编译器同意了,各位啊,让你编译通过了,编译器一看,哟,程序员原来是有意识的啊X啊,它是浪类型八个字节。然后呢,T类型Y是四个字节啊,然后程序在前面显示的写了一个小括弧,那么就表示程序同意做强制类型转换,编译器会让你通过,但是你要注意,加了强制类型转换服之后,可能能可能会导致精度损失啊,也可能不会损失,关键是看这个数据的大小,如果你数据的大,这个数据的这个数据这块呢,可能比如说啊类型这个数据啊比较大,它超出了这个int类型取值范围,大家想一想,在这个地方,你如果强制类型转换进T的话,它是不是就会出现精度损失啊,并且我不知道大家还记不记得我们叫砍砍掉对不对,砍掉前面几个。
13:08
啊,您如果是八个字节转成四个字节,它会把前四个字节字节砍掉啊,前四个字节砍掉是这样的啊,是这样这个啊也是比较重要的一个内容,各位啊,在这里呢,有两个概念,一个叫自动类型转换,一个叫强制类型转换,把这两个给它掌握了啊掌握。嗯。好了,那么这个主要是说呀,这个int a等于100,这个没有类型转换啊,然后这个int b等于A,它的原理是什么?其实是把A里边保存的这个值100复制一份给B啊,是这个意思。啊是这意思行,这个呢,简单的了解一下,那最后的这个例子,我们来看一看讲的是什么呢。这个例子也相当相当的重要啊,因为这个很诡异啊,很诡异,比如说bit类型的B等于300,这个能不能编译通过呢?首先我们说了,在加法语言当中有一条规则,就是我们这个数字它会当做一个当做一个int类型四个字来处理。
14:12
那四个字节来处理它付给BA类型B这个变量的时候。啊,直接这样写,像这个是大容量对吧?这个是什么小容量,大容量不能直接赋值给小容量,这是不允许的啊,所以编译器就会报错,怎么解决这个问题,可以这样,在前面加一个什么呀,强制类型转换符啊,最后为什么等于44,当时我们给大家演示了一下,这个数字是300,所对应的这个二进制码,把前面第一个字节,第二个第三个字节全部砍掉,剩下最后这一个字节它是多少啊?44对不对?所以呢,输出这个结果是44 44啊,那么这个精度就严重损失了啊,所以谨慎使用强制类型转换,那么到了这里为什么就不报错了呢?哎,到了这个地方为什么?哎,这个不,难道不是int了吗?哎,其实说到根上,它还是四个字节啊,127实际上它还是按照四个字节分配,只不过Java中它又加了一条规则,它为了方便我们程序员的开发啊,编译器里边给了一个优待,什么优待啊,就是说如果你等号后面。
15:18
这个数字它没有超出这个be类型取值范围的话啊,BE0取值范围没超出的话,你有权利可以直接附上。这个赋值赋值啊没有任何问题,包括short类型也是一样的啊,包括这个short类型也是一样的,各位啊,所以这块呢,大家记住规则就行了,这是一个规则,我告诉你,你记住就完事啊,你不用感觉很诡异说老师我不太理解为什么127。就能直接付128就不能付呢。哎,这个呢,就是一个规则,你记住啊,如果没我们的类型取值范围,你可以直接没有超范围直接可以复啊,这是一个规则,就其实这个我昨天说了就是一个什么呀啊,就是一个方便我们程序员开发的,你想一想,如果说你没有超出这个范围,完了之后你还天天在这写一个强制类型转换符,你想想你的开发多累呀。
16:17
对不对,哎,你明明没有超出,编译器可以检测出你这个数据到底超没超对吧?哎,所以这块的话,哎,所以这块的话咱们呀,编译器哎很智能检测出这个值啊,没有超出我们的范围,所以呢,可以直接附上去啊,这是Java中的一个规则,好了,到此咱们就把我们昨天讲解的内容就全部回顾了一遍啊来,我把这些呢,全部关掉啊,全部关掉。来这块也关掉它啊,然后这个呢,我也关了它啊。好了。
我来说两句