00:00
行,那么通过刚才这样一个讲解呢,我们把这个常用的基本数据类型的变量呢,基本的情况呢,我们就做了一个介绍了,那接下来的话呢,我们说一下这个内容叫基本数据类型变量的自动类型提升,诶这呢是它的一种运算规则,然后对应的呢,还有一个叫强制类型转换,诶这两个的话呢,在我们实际开发当中用的非常的多,所以呢,也算是咱们的这个重点,诶咱们首先看第一个啊,OK。回过来啊,我们讲这个知识点的时候呢,再去新建一个Java文件啊,我们不妨呢,还是教程啊,Variable test。三。好,CTRLCCTRLSCTRLV。TEST3行这个你写完之后呢,稍微的看一眼啊,有的时候呢,写错了这个呢,你及时的给大家调整一下。诶,这个呢,咱们是用来诶测试叫哎基本数据类型,变量间的运算规则。啊,运算规则好,首先啊,我们这里边提到了是针对于基本数据类型变量间的运算来提的这个规则,那么基本数据类型变量呢,提到有八种。
01:09
但是我们这里边儿呢,只涉及到了七种可以做运算。诶,这里边儿首先提一下啊,说这里啊,提到可以做啊运算的啊,基本数据类型。啊,有七种。说不是有八种吗?有一种不行是吧。对,不包含。哎,不玩类型。那你想波尔类型它就是true和false,你让这个true加上个一,它应该等于几呢是吧?哎,就没法聊了啊,哎,所以我们就不包含波尔类型,哎,但你说你这个差是不是也不行啊。哎,差呢,你这个小A,你让小A加个一是几啊。诶对,别忘了,咱们小A的话呢,它不是有个二次码的值是97嘛,哎,它既然有这个数了,它就能够去诶做运算,所以呢,是包含这个差的啊这是我们说的第一个问题,好,第二问题,那么运算规则都有什么呢?
02:06
啊,运算规则。哎,包括。哎,有两个方向啊,第一个叫自动类型提升啊,第二种叫它的一个逆运算。强制类型转换。诶,这个自动类型提升,你看有个自动的,说白了就是不用你管它,自动的就会有一个提升。而这个强制的话呢,强制就得需要你额外的做一些操作了,所以它呢是一个手动的。啊,这是自动实现的,这个是必须手动实现的。好,这个呢,咱们要自能力提升,咱们这里边呢,哎,主要呢,是来说这个第三个点哈,诶或者咱们这个测试的话呢,主要是来测试。啊,这个词什么呀,哎,这个代码啊。哎,这个点文件。哎,用来测试。哎,咱们这个,诶自动类型提升啊,一会儿呢,咱们再写一个呢,哎,去测试这个强制类型转化啊好,那么自动类型提升这块呢,涉及到一个自动的问题,是什么一个意思呢,咱们稍微的。
03:08
感觉一下啊,比如说我现在定义一个in的性的变量叫IE,这个质量是十,这个IE的话呢,它是一个变量了,我要是付给另外一个变量的话呢,很显然我这样写是不是可以。对,你就相当于把你这个是不是给了另外一个变量,很简单啊,那现在问题就是说,我能不能把这个ae的变量给一个类型的变量呢。对,这呢,就是我们现在要说的这个问题了,那首先两个类型不一样了,不一样的话呢,我们做这种复制操作呢,你就要想能不能行,有的时候行,有的时候不行,这个时候呢是行啊这时候就要谈到这个自动类型提升的这种规则是什么了。好,那首先我们把这个规则呢说出来啊。哎,这个规则呢,就是当容量小的啊变量与容量大的这个变量做运算时。
04:09
啊,这个结果呢,自动转换为。哎,容量大的,哎,数据类型。说完了好,那这里边儿我们需要做一个说明,这个说明是什么呢?这个容量小跟容量大指的是什么。哎,此时的这个容量小。火大。呃,或大是吧,并非。哎,并非指这个占用的内存空间的大小。呃,并非指占用的内存空间的大小。啊,而是指。嗯,表示数据的范围的大小。诶的诶范围的大小,那从这个角度上来讲,有一个比较特别的啊,你比如说咱们说的这个浪啊,这个浪的话呢,它是占八个字节是吧。
05:10
而咱们这个float呢。对,他典型的是占四个字节。哎,如果呢,我们要是从这个占用次节数大小来看,它肯定是大,它肯定小。但是呢,我们现在指的呢,是呃表述的表示数据的范围的大小,那从这个角度来讲,是不是这个范围要更大。对,它的范围要更小,所以说啊,哎,你比如说像我们刚才写的这呢,呃,In的类型表述的范围肯定比long的要小,所以呢,小的就转化成大的了,那对应的啊,我要是把这个L1啊,能不能把它复制给float呢?哎,表述范围的大小是不是它的范围大,它的范围小是不是就可以啊。来,你看我们这块做一个编译啊。诶外T3.va,诶你看编译通过了,那说明这样写呢是没有问题的,那通过我们刚才这样几个演示呢,这个规则的话呢,我们好像呢,就差不多能够把这个式子写出来了,最起码刚才一个演示int呢,可以复制给这个long。
06:14
浪呢?可以复制给这个float,那很显然呢,这个float也一定可以付给。Double。哎,那这呢,我们基本上就把现有的这几个呢,呃,能够想象出来了,那还差呢其他几个。叉。哨他。或而不行是吧,哎,那么很显然呢,刚才提到的这三种呢,呃,应该是不是往in的前面放啊。那怎么写啊?哎,按照咱们的这个理解的话呢,诶你想BYT是一个字节,它是不是按说应该能够转化成这个short了,是吧,SHORT2个字节它应该转化成这个int了,差呢,咱们一会再单说啊,哎,是不是光考类这六种的话呢,似乎应该这样去实现啊。对,似乎是这样子的是吧,哎,这一似乎呢,发现里边就有坑了,哎,咱们稍微的感受一下啊,这个来个B12。
07:04
啊,这个B1呢,写完了哈,然后呢,我这个B1呢,如果加上一个I1。Be的int的好,Bet的和int的数运算结果是。他。哎,所以这个时候呢,我们要接收的话呢,你只能是拿一个int呢来去做接收。那这个当然了,你也可以把它改成了啊,咱们说的是最少最小,你得用哪个类型,得用int。编译没问题。哎,这是可以的啊。行,那你要是试图啊,比如我们用一个来接收一下啊,这个来个B。哎,保存。诶,你看编译这时候就出错了,说不兼容的类型,因为呢,哎,我从int呢,是没有办法转换成BAT的33行,他就认为呢,你这个呢是个int,你就不能转化成更小的一个BAT,所以这个编译不通过。
08:00
诶,这个呢,就是我们刚才说的这样一个点没问题,好,呃,这个呢,大体上这个思路你看是没有问题的哈,呃,那下边呢,我们来说这种特殊的情况。来特殊情况。哎,就是后边这块我都不用刻意的去演示了啊,大家应该也都能够从理论上去理解了。特殊的。好特殊的,比如说啊,咱们重新来啊,我这儿呢,咱就画一条线啊。嗯,这就这样的分割一下吧,大家能知道啊,上面是我们大体上的这个规则,下边来看特殊的这个情况。特殊的这个情况呢,哎,我这里就写个一吧。我这儿呢来一个bit类型,我叫B3,这个呢写个12。呃,然后呢,来个少的类型叫S1啊十。现在问题来了,我这个B3加上S1,这个结果是什么类型?啊,同学说是int了是吧?啊,那应该是预习过啊,那按照我们的理解是啥话呢?理解的话呢,哎,这个是一个字节,这俩字节结果呢,按说应该是俩字节是吧?哎,我们试图呢,这样来接收一下看看啊。
09:11
如果我用short的S2呢,去接收来编译化了。40行,40行不接上的类型,从int呢转化成short呢,可能会损失精度,诶你看它说的是int沿呢,它就把这个呢认为是int了,所以你用short呢不行。啊,这个编译不通过。这个粘过来啊,那要想通过呢,你这个B3。跟S1,哎,这个呢,接收最起码啊,最小你得整个int来来接收。这个咱们该删了是吧。保存一下。啊,是。对,咱们说呢,在同一个作用域内呢,不能定义同名的这个变量了啊。这个得写成四啊。哎,或或者怎么着。我写一个这样是不是也行。哎,这呢,相当于是使用现有的这个变量是吧?哎,它的类型是int型啊也行。
10:05
哎,编译诶你看这就通过了啊,诶这样写是可以的。好,那相当于呢,就是这两个要求运算的话呢,这个结果注意啊,咱们现在这个写法是不是不对。啊,这是不对啊,包括我再举个例子你看。这个我再来一个的一个B4来一个十,我现在B3加上B4。都是better,你觉得呢?啊,五。能行吗?便宜。四十五行挂了不填然的类型还是int啊,BYT和BAT做运算呢,也不能用BYT接收。哎,那也不行。哎,那short跟short呢,也是一样的,我就不举例了啊,所以通过刚才这样一个解释呢,我们发现呢,这个BAT和shortt之间做运算,或者是BAT和BAT之间做运算,Short跟short之运算,它的结果呢,都得是int类型。
11:00
啊,这是我们说的这个叫特殊的这个情况啊,呃,就是大方向上的话呢,是这样一个规则,但是呢,有这个细节的啊,这个我写到这儿吧。特别的。哎,特别的通过刚才这样一个说明呢,我们说呢,就是be。还有这个,哎,Short。类型的变量之间做运算。啊,结果为特类型。那么可能就会想说,诶,他为什么会有这样的一个要求呢。大家感觉呢?啊,这个原来我也想过这个问题哈,但是我觉得你要非要给一种解释的话呢,那可能就是说这个BAT或者short呢,他们在表示数的时候呢,其实范围都不大嘛,是吧?哎,很有可能他们之间一做运算,这个结果就超了。啊,你比如说你这是个bad,这个bad很容易的,一加就超过127了啊,为了避免出现这样的问题,你看你看,如果他要是编译让你过了啊,你编译就没有发现问题了,但实际运行的时候呢,发现呢。
12:07
数是不对的。啊,他为了规避这样的问题呢,所以说呃,他就有一个强制的语法上的一个要求,就是你要这样去做运算啊,你要不是给int,我编译都不让你过。哎,编译呢,就看语法规则的啊,大家可以这样的去理解一下。这是我们说的这个事儿了,这呢是咱说的叫特殊情况一啊,大家体会一下。啊,这个就是ABAT和short之间做运算。哎,做心算啊。行。哎,然后呢,我们再来看一下这个特殊情况二啊,咱们说一下这个差。哎,说这个叉啊,叉呢,我们刚才没有讲,它呢,首先也是可以做运算的,哎,咱们就来一个A。哎,这个C1注意,我现在加上一个。
13:00
加上一个B3吧。第三呢是这个12,那问这个结果是。嗯,按说的话呢,你这是一个字节,它是俩字节是吧,我们就会想能不能用叉来接收吧。哎,是是啊。走挂了52行,52行不线上的类型从int呢转换到叉垂直进度,它就认为你右边这块也是int。所以说哎,也是编译不通过。那最少我们得用谁介绍?带in的来接收啊。该挨挤了呀。A4是吧,哎,C1呢,就加上这个B3。行,这时候呢,我们来做一个编译啊,这时候就可以了啊。哎,那也就是说呢,咱们这个char类型,BAT类型和少类型,其实他们三个呢,应该是放在一起的啊,哎,我把它呢再整到这儿。
14:01
哎,这三个之间啊,这个呢,也再加一个。包括呢,两个叉之间做运算也是一样啊,它们三者之间两两做运算,结果呢,都得是int类型。这就是咱们要说的最终的这样的一个结论。啊,最终这样的结论,哎,大家呢,把这个记住它。啊,记住它啊好呃,那么这个是我们说的这个特殊情况这个二啊,哎,这个说完之后呢,我们再讲啊,我把这个再画一条线来说点这个特别的这个知识点啊。啊,什么特别的知识点呢?来大家看啊。啊,这个呢,叫。呃,练习一吧。大家看前面呢,我们讲过这个long类型的这个变量,哎,我定一个叫L。有L了,没有了。我这叫L2了啊。诶,我写个123L这个肯定没问题。但你会发现呢,我写个L3呢,我写个123,这样你会发现呢,也没问题。编译。你看。
15:00
那么怎么解释?嗯。对,这个本来是int类型,然后把它转换成了这个,这叫自动类型提升吧。是吧,哎哎,这里边儿你看我们提一下啊,这个呢,就表示你确实是用的。八个自己存的123。而这个呢?哎,你123其实是用了四个字节,当然你把它呢,又付给了一个八个字节的这个long类型的一个变量了。哎,所以呢,也是可以的,所以这个位置呢,大家理解成。啊理解为呢,叫自动类型提升,而这个不是是吧。哎,这就是纯粹的就是一个八个字节的浪啊,哎,这个你可能感受的不明显,你看我再写一个你就有感觉了啊,我写个L4啊,123123123。再来个123,你看这个啊。嗯。我感觉他应该是超出印的范围了啊,咱们测试一下。
16:02
编译你看,哎,我的感觉是对的啊。这个数呢,有点大了。诶按照刚才这样的一个理解,其实它是一个int类型,这个int类型呢,是用的四个字节,它已经超出了这四个节字节了,所以说你这块呢,在这样写的时候呢,直接就报错了。哎,那这时候我们在这写啊,说呢他呢,哎理解为。啊,Int类型。啊,因为啊超出了int范围。诶,所以搞错了。就这样不行。那如果你就想把这个数付给个long怎么办?对,这个时候你加一个大L呢就可以了。哎,你看跟他呢,就有区别啊。嗯,然后我们再去做编译啊,这就没问题啊,因为人接这块呢,就是实打实的八个字节是吧。哎,说此时的。啊,这个这个它啊CTRLC。
17:01
哎,就是。哎,使用。哎,八个字节,哎存储的这个long类型的。啊,这个值。诶,这是我们说的这个第一个问题啊,所以说大家平时在定义这个浪的时候呢,诶,你如果像写个123没有加L了,呃也行,你知道是什么原因啊就可以了啊啊是因为把这个in的类型呢,直接它转成了这个long类型的。哎,这样来理解,好,那你二这个数呢,超出印的范围了,那你必须要加上这个L,这是我们要强调的第一个事儿,好,那么接着练习二啊,哎,那么对应的我们说还有一个呢,叫做float啊,这个float的话呢,我们另一个。前面好像写过啊,F2。这个我写个12.3,它呢是要求必须要加上这个F的。如果要是不加呢,不管你这个数小也好,大也好,都会报错。你说十二三这个flow不也能存得下,哎,是但是呢。对,我会把它认为是double。
18:02
编译啊,67行,哎,不行。因为呢,我们说不加后缀的默认就double double呢往这块转,相当于你这块不是小的往大的转了,就大的往小的转了啊不满足。啊,自动。按类型提升的这个规则了。啊,你是从大的往小的转啊,所以呢报错。啊,这个所谓的规则呢,就是你是把一个double的啊,想强行转换成是一个float的啊,这是不可以的。啊,所以不错了哈。哎,所以报错啊。啊,这个也叫编译诶。不通过啊好,这呢,就我们说的这个第二种情况,也就是说这个flow的话,你定义的时候是一定要加上F的。那这是我们说的这个练习二啊,好,然后接着这个,诶练习三啊,诶练习三的话,我们说一些什么呢?就是关于咱们所谓的这种常量的一个定义啊,嗯,也就是说这样的一个场景,比如说上边呢,咱们有一个bad,这个咱们再来一个吧。
19:08
AT5啊。这个呢是个十,我让这个B5呢,我加上了一个一。那就这时候,关于这个一,我们应该怎么看待的问题了。啊,它是什么类型,直接决定了我们结果应该用什么类型来接收。用bad行不行?不行看一下。挂了72行,72行呃,不兼容的类型,Int不能到艾,哎,说白了就是他认为这个结果是int是吧。哎,这个原因呢,哎是这样子的啊说呢这个叫。呃,规定啊。哎,规定一整形常量。啊,规定为。哎,是int类型。所以说这个一呢是个int类型,那BY的类型和int类型做运算结果呢,这是。
20:00
啊,In,我叫IE了啊。哎,这个呢是没有问题的,我就不打印它的值了,咱们直接就看编译能不能过就行啊。啊行,这要打印结果呢,这个IE呢,就是11啊。好,这是一个事儿,然后对应的话呢,哎,我们同样呢,会有这个古典类型,我们就还拿十来说,还拿这个B5来说吧,我让他去加上一个12.3。哎,它呢也是个常量,哎,那么问接收的时候呢,应该用谁。对,这时候呢,只能用double。不行。哎,保存一下啊,这个呢,就是相当于咱们这个规定二了。啊,正这就浮电型的常量。哎,常亮,哎规定为啊规定是是吧。Double类型。行,所以说这块呢,我们这样的写这个结果呢,是没有问题的。哎,保存一下啊。
21:01
嗯,来测试。哎,可以是吧,哎,这就行了啊好,那么这个呢,我们就说到这儿,然后呢,我再想写一个这个练习的一个四哈,你看这里边我们蕴含的知识点还挺多的,呃,大家呢,回忆一下啊,咱们在讲这个标识符的时候。你看这里边儿我们有个规则啊。说数字不能开头是吧。哎,除了这个数字的话呢,别的都行。那我们可能会想说,为啥数字不能开头?对,这个时候呢,就可能会有问题。哎,有啥问题呢?呃,举个例子啊,你看。哎,我这写成个注释的方式,哎,这个不用啊,直接来这家写就行啊浪类型的,比如说。你可以数字开头,那我这块呢,我假设写个叫123。L哎,它的值呢是12,这个大家觉得如果允许数字开的话呢,是不是没问题。没问题是吧,好,那我现在呢,我在。嗯,哎,这个我也不一定非得定义成是个long了,我定义成个int是不是也行是吧?哎,我现在又定义成个long型的变量,我叫LL。
22:10
有L。啊,哎,二六吧。50L6,我让它的负值呢是123L。你说会有什么问题呢?对,假设这个要是行的话呢,这个是变量名,那你说这个123L,我是看作是一个常量123呢,还是应该看成是一个变量123L,它的值是12呢。哎,说白了就是我这个L6,我到底是12呢,还是应该是123呢,是吧,哎是不是就出问题了。哎,所以呢,我们才规定呢,你不能数字开头,因为我们有这种所谓的后缀的情况,那就容易出现呢,它到底是变量名还是数值就不清楚了。啊,这呢,就是我们现在给大家的一个举例哈。啊,这个我们把它注释掉。
23:03
这样啊。诶,来说明啊,为什么不允许变量名是数字。啊,开头的。说白了啊,就是为了,哎有一个词儿特别好啊,这个是以前一个同学说的,这个词我觉得很好,叫什么自洽。啊,以后咱们学习扎别程语言后边有好多的这个规则,其实有一些规则呢,是它强行要求的,就比如说整形有四种。啊,最常用的是in啊,这个默认的是int类型啊,整型的常量是int类型,这就是实打实的规则,你就别问为什么了。那么基于这样的一些基本的规则呢,又会衍生出来好多的规则,其实衍生来一些规则呢,就是为了防止现有的一些规则之间呢,互相矛盾,哎,所以有一些自洽的一些规则,就像刚才数字不能开头,就是这个原因,哎以后呢,咱们呃讲的越来越多,你会发现呢,啊,原来其实编程的话呢,就有特别底层的一些规则上边好多都是衍生出来的,是可以理解的,是可以解释,因为所以的。
24:06
啊,那么这些呢,掌握之后呢,大家也不妨以后。啊,你也可以自己开发一门语言是吧。当然了,你自己开发运用语言,哎,其实呢,主要涉及到两个事儿,咱就闲聊了哈。哪两个事儿,第一个事儿。主要呢,编写这些语法规则。啊,然后第二个事儿呢。啊,逻辑不是逻辑,就是你用这个规则,你自己写代码,你愿意怎么写你就怎么写是吧?啊那么规则写完以后呢,这个代码你写完以后是不是得运行啊。哎,这个运行的时候呢,你需要一个。叫编译器。是吧,你像咱们Java,咱们学习的是Java的语法规则,大家呢,你代码你你就随便写,只要满足这个规则,它就不报错了,然后你要想出结果,是不是得在编译器里边去编译,去运行,是吧?咱们用的编译器是谁呀?是不是Java c啊。哎,这呢,就是它的这是个编译器哈。
25:01
啊,你看这个指令,它其实对应的是个编译器,这个编译器编译完以后呢,生成的是。是不是自解码文件啊,然后呢,这个自解码文件交给谁去操作呢。是不是交给咱们第一章讲的GM去做啊。后边这个事儿都是GM来做的。而且GM呢,现在它很强大啊,嗯,就是咱们说的Java语言呢,不能说叫世界上最强大的语言了,但是Java虚拟机可以认为是现在世界上呢最强大的虚拟机。这个呢,大家基本上没有什么意义,就是因为这个Java虚拟机啊,它不光能够用来解释运行Java程序,它可以解释很多种程序,比如相当于咱们后边大数据同学要学的skyla是吧,我就可以在Java虚拟里边去解释运行。从这个角度上来讲,这个勾呢,你可以给它拿掉是吧。不管是Java的虚拟机了,好多种语言都可以的啊,包括像Python都可以。行,那如果你要是自己开发一门语言的话呢,你只需要呢设计语法规则。
26:02
自己洗个编译器。啊,不叫Java c了就是吧,编译完以后的话呢,你也可以生成是不是类似于像字节码文件这样的东西是吧,然后你放到GM里面去让他帮你运行就可以了。哎,就做这俩事儿就行啊,那么翻回来,咱们现在学Java呢,这个事儿也不用你整人家都有了,咱们其实就在学这个语法规则。至于说呢,规则学会之后呢,写代码你会写他不会写,那是你逻辑没整明白,算法差一点,诶通过我们不断的去练习呢,去强化这个事儿就行了,这个规则的事儿呢,其实没什么难度啊,就是你说我这个我我我写错了,这个忘了分号了,那纯粹就是你写的少啊,多练练就行。OK啊行,那上午的话呢,咱们就讲到这儿啊。
我来说两句