00:00
我们已经复习了一下Java里边数据类型做自动转换的这个过程,利用一个常见的面试题给大家做了一个讲解,当然了,前面我们讲解的主要是自动类型转换,那Java里边除了自动类型转换之外,诶,类型转换还有另外一种就是强制类型转换,强转的话比较简单,Java里边的语法就是直接把类型写在前边,用一个小括号括起来,我们就可以直接把这个类型做强转了。啊那像刚才我们举的这个例子里边,如果说我们想把这个差,如果直接去做这个自动类型提升的话,它是变成了int类型,那如果说我们想把它直接转成一个short,可不可以呢?哎,这个时候就必须要强转了,那这里边我们定义一个A2是一个short类型,要做强转的时候,你如果直接这里边A赋值给它,这显然不行,那前面要把一个short括起来和强转就没问题了,那后边如果说我们把这个C2作为参数传进去的话,不然输出的就应该是。
01:00
SSSS了啊,所以这个过程其实是大家都比较熟悉的,那接下来我们就来考察一下scla里边数据类型转换又是什么样的啊,那大家会看到啊SKY拉里边整体来讲的话,数据类型转换的规则跟Java是一致的,也是精度小的类型自动转换为精度大的数值类型啊,所以大家看到就是这幅图,就是我们前面在介绍scla类型系统的时候画出来的这幅图,它的数值类型里边呢,涉及到自动类型转换的,其实主要就是表示表示整数小数的这些bit short in the long float double,还有差对吧?啊,那bulling,还有这个strings unit这些他们是不会跟数值去做转换,一般啊,不会直接去做对应的这个转换。当然,关于字符串转换,我们可以放到后边再说。那这里边它的自动转换的规则呢,其实主要我们看到就是这里的这一条主线。
02:00
是基于整形和呃这个浮点类型的一个精度逐渐提升的过程,BAT它只有一个字节,精度最小,所以呢,在做这个混合计算,或者说呃,想把它赋值给高精度的其他的一些变量的时候,那要对它做一个提升,它可以提升成short类型,那么short呢,可以提升成int类型,Int提升成long啊,大家知道这就是一个字节,两个字节,四个字节,八个字节啊,Long之后还可以再提升成float和double,这就是整体的规则和流程,那这里边比较特殊的呢,其实就是这里的char类型了,叉,大家知道是字符类型。它本身是可以作为字符串的组成元素,可以作为这个出现的,那。底层呢,我们存储的时候,它其实存储的是阿斯孔马池嘛,所以也是一个整数类型,它其实也可以跟其他的数据类型做混合计算,那这个时候它要转换成什么类型呢?这里大家注意一下,它要转换成的是int,它只能转换成int类型,别的数据类型跟它都不能直接转换啊,这是比较特殊的一个用法,那所以总结起来的话,其实就是这么几句话啊,大家可以看到,首先就是自动提升。
03:17
就是低精度要转成高精度,然后呢?呃,就是做这个负值的时候,高精度赋值给低精度,那就要报错对吧?如果要是低精度赋值给高精度,是可以做自动类型转换的,另外就是BAT short和差之间不能自动转换,那他们要计算的时候怎么办呢?转换成int啊,接下来我们把这四条复制一下,然后在代码里边还是来做一个具体的测试,我们在第二章下边。新建一个的对象object,当前是test,零八,类型转换the Type Conversion。还是先把main方法写出来。我们把对应的。
04:05
第四条规则做一个复制。呃,然后我们把它注释掉之后。格式化一下对齐,首先我们看第一条自动提升原则,哎,那其实这就是说啊,如果要是有不同类型的叫精度不同的数值要混在一起做计算的时候,那当然就是以高精度的为准了。举个例子非常简单,如果有一个A1,它是一个BAT类型等于十,然后呢,有一个B1,它的精度很高,是长整型啊,比方说这里边大家知道本身如果我这里边给一个整数的话啊,默认其实是把它作为作为int来处理的,那这里边如果要是你把一个int付给long,付给长整形,这里其实本身就做了一次转换啊,那如果说大家要是本身把它定义成长整形的话,这样就不用做转换了,对吧,本来是一个长整形,接下来阿俩如果要做一个叠加计算,我们定一个这个叫RESULT1A1加一,那其实我们知道in的RESULT1那。
05:16
类型应该是什么样的呢?有同学可能想,诶,那是不是默认这里边都应该加起来是一个int类型呢?比方说前面我们这里边给一个int对吧,很们明显这都是原始的这个数据都是int嘛,那是不是加起来可以等于int呢?当然不行,因为这里的B1它的精度是long,它是八个字节精度更高的这个类型,那么A1BA跟它加起来之后,要以更高的精度为准,这里边的类型就必须得是长整形对吧?啊比这个大家是知道的啊,假如说就想得到一个。比方说result b1,我就想得到一个int,那怎么办呢?呃,这也简单,就是我必须要把A1加B1的结果,那就要做一个强制类型转换了,对吧?啊,那在Java里边的话,强制类型转换是前面加一个小括号,把这个类型写出来,在skyla里边话是这样写对吧?那SC拉里边没没有这种语法,那scla里边是后边的这个表达式括起来,然后直接这个方法,哎,这里边的一个to就可以做一个强转了啊后面我们还会专门说,所以这里可以先给大家简单的写一下。
06:32
然后后边的第二条,你说的是负值的操作,赋值操作,其实前面我们也看到了啊,如果要是低精度不给高精度的话,这个时候其实可以直接做这个类型转换的啊,当然如果要是高精度要付给低精度的话,那就直接会报错啊,当然这里面比较特殊的是就是如果我们这里是一个常数值的话,常量值这个其实编译器是可以自动给我们判断它是否在当前的。
07:01
整整整形啊,整数类型的范围内的,那如果没有超过的话,它其实是可以把它作为BAT类型的值传入的啊,那这里给大家举一个例子,就是如果啊,我们再定义一个A2,这一个by a于十,那接下来我们再定义一个二二,呃,我们定义一个int,直接把A2如果要付给它的话,就没有没毛病,直接可以把低精度的值不给精度的值,但是如果说这个时候想来一个C2,它是一个BAT类型,我要把B2付给他的话,你看这肯定就行了,对吧?哎,这样你反过来做这样的一个赋值,显然这就是不对的了啊,这就是我们所说的不能反过来赋值啊,尽管之前这样是可以,那当然这个解决方案是什么呢?当然也是做强转对吧,如果要做了强转的话,这就是成立的了。这个大家可以。
08:01
我们说这个是可以的啊,你把这个注掉。啊,那接下来我们再说一个比较特殊的需要注意的一个关键点,就是at short和差之间是不能自动转换的,哎,那这说的到底又是什么呢?是举一个具体的例子,另一个A3,它本身是BAT类型和十啊,然后我们再定义一个三,一个差类型,如果说我们想要直接把A3反成B3可以吗?这当然是不可以的,对吧?哎,BAT和叉是不能直接去转换,那这里如果说我们,呃,我们这里是再定义一个B3,一个具体的值啊,比方说等于B,然后接下来我们再去定义一个C3,我们定义一个C3,如果要想把B3付给他的话。
09:05
看这里边是I idea,这里边编译是不报错的,对吧?诶那大家可能会想到,那这个真的是没有问题的吗?我这里边直接print line c3是能看到它对应的值的吗?我们运行一下可以看一下看这个不对,对吧。这里边,呃,就是这还是idea对于scla支持的不好的一点啊,尽管这里边它本身不报错,但是如果我们编译运行,你会发现它要求的是一个差类型,就是BAT类型的值,但是我们传了一个B3差类型的值给他,它是不能直接做这样的一个类型转换,哎,当然就是如果要直接把它这个To B的转换过来,这肯定就没问题了啊,所以呃,大家需要注意一下啊,有时候也不是非常简单的看到这个idea不报错,这里就肯定没问题,我们把这个写出来来入点。好,那这里如果说C3那家就想到到底是什么样的类型,你把它转换过来呢?诶这里如果C3是一个int类型的话,这个时候就可以完全转换过来了,哦,就是我们后面说的啊,就是他们三者其实也是可以转换,可以做计算的,可以做混合计算的,那要计算的时候怎么办呢?必须要先转为int类型,接下来我们四四条,同样我们还是定义一个A4,一个BAT类型,给一个12,然后value,我们定义一个B4,一个short类型25,然后再定义一个C4,是一个叉类型。
10:45
C我们定义好了之后,哎,那接下来大家可能会想到,如果这里啊RESULT2这RESULT4吧,我们直接写成四,如果说我直接要用这个A484的话带和short,诶它俩好像是可以自动类型转换的,对吧?那我这里边如果直接定义这个RESULT4是一个short类型,这个正确吗?
11:13
看到这个是不对的,如果要直接打印到四的话,这边idea直接就给我们报错了,对吧,说这个要的是一个int类型,所以大家要注意啊,就是如果我在这里把A4直接赋值给。直接赋值给四的话。这个是没有问题的,这个语法是成立的,可以赋值做这个提升,一个字节转成两个字节,但是如果要是阿俩想要直接去做这样的一个计算的话,这时候是不行的,必须最后要得到的是一个硬的才可以。啊,所以大家一定要注意啊,并不是说bitt shot它俩啊,它俩自己可以互相转,呃,只是在跟char做这个做转换和计算的时候,才必须要转成int,即使是BAT和short它俩做叠加的时候,也必须要转换成int啊,这是SKY里面比较特殊的一个地方,大家需要记住啊,然后当然了,如果这个时候我们在第一个。
12:18
比方说RESULT4,四要把它们三个A4 B4 a4全部加起来的话。没什么好说的,它是不是就必须也得是一个特类型啊啊,那所以最后如果我们把它们三个做一个叠加,大家可以看到它是可以正确执行得到最后的结果的啊136这是因为。这个大家其实知道啊,十二二十五这两个叠加没有问题,C的话是要拿它的阿斯码去做一个叠加,对吧?呃,前像前面这个B的阿斯科码是98,那C的斯格码当然就是99了,99再加上12,加上25,当然就是136了,这是关于自动类型转换的解释。
我来说两句