00:00
我们已经了解了skyla里边的数据类型的自动类型转换啊,那这一部分大家会发现跟Java里边其实是非常类似的,那在SKY拉里呢,除了跟Java类似的数值类型的自动类型转换之外,那对于其他的类型啊,包括引用类型,还可以有非常强大的影视转换的机制,而这里边可能涉及到影视的函数,影视类等等其他一些特殊的用法,我们会在后边的章节啊,专门用一章来给大家讲解一下影视转换的这一部分知识啊,那那接下来呢,我们除了自动类型转换和这个所谓的影视类型转换啊,那接下来另外一大类当然就是强制类型转换了,强制类型转换整体来讲的话也跟Java非常的像,只不过就是语法有所不同而已,大家看到在这个Java里边,如果我们要把精度大的数值类型强行转换成精度小的类型的话,诶默认情况下它不能自动转换,会报错,那怎么办呢。
01:00
那我们就直接要加一个强转函数了啊,那比方说在Java里边,我们是直接用这个类型加小括号放在前边做强转,那在SKY拉里边呢?呃,Skyla里边大家要注意它是都是方法调用对吧?哎,所以这也体现出了scla的一个面对对象的特点,哎,JA拉里边你既然说这个一切都是面对对象嘛,一切皆对象,那你这种强制类型转换,这显然看起来就是跟对象啊什么的就没关系嘛,而对于盖拉而言,大家会发现这是不是相当于我把这个数值也可以直接当成一个对象啊,哎,一个整数,一个小数,它都是一个对象。比方说当前一个2.71个小数,它就是double类型的一个对象,然后呢,我调用它的一个方法,一个to int方法,这样就可以把它强制转换成一个特类型啊,所以这个使用起来会非常非常的方便,也非常符合面对对象的思路。那具体我们需要注意的点呢,就是一个就是高精度转换成低低精度的时候,一定要用到强制类型的转换,然后呢,强制转换的符号只针对最近的操作数,操作数有效,因为大家注意,为什么说它只针对最近的操作数有效呢?因为它是方法调用啊,啊离得最近的这个方法调用级别是呃,优先级很高的啊,所以当然只是最近的这个数直接去调,那如果要是比方说我们要是一堆数,它计算的结果要去做一个转换,怎么办呢?
02:34
小括号可以提升它的优先级,另外还有一个就是做强转有可能造成精度的降低,甚至有可能造成数据的溢出,这个大家是要格外注意的啊,所以接下来我们也是把这一部分在代码里边做一个简单的测试。上边我们这一部分是。第一部分自动类型转换,那接下来我们要测试的就是第二部分强制类型转换。
03:18
主要要测的就是这两个要点,所以还是把它格式化一下,所谓注释放在这里,然后接下来首先第一条我们要测的是O精度转换精度,哎,这其实看的也非常的明显啊,你就直接举一个文档里面的例子,我们定义一个N1是一个int类型,那这个时候如果说我们现在要一个2.5的话,直接这么转,那就报错了,对吧?哎,我们当前2.5本身默认是一个double类型嘛。那现在要转成int,怎么转呢?直接调to int方法啊,所以这个其实还是非常简单的啊,那这里大家需要注意的是,我们可以把它打印出来看一下看一下。
04:02
N1的值通过这个强制类型转换之后,它得到的到底应该是二还是还是还是这个三呢?是四舍五入还是直接取整呢?哎,大家会发现这里边其实是直接取整,取整数部分并不会四舍五入,不光2.5啊,即使是2.9,我们这里边be到的N1也是二对吧?啊,那这里大家需要注意的是,那如果说这里是负数呢,负的2.9它是到底是向上取,是不是向下取整呢?前面我们看到有点像是向下取整的感觉,那如果是向下取整的话,那就相当于负2.9应该是取负三了,负三是它比它小的最近的一个整数,但是如果大家直接做一个运行的话,会发现负2.9toin之后取整取的还是负二对吧?所以这里面我们取的就是只是做了一个取整,取整数部分,并不是向下或者向上取整,也不是四舍五入啊,这是关于强转的这样的一个操作,当然了,与之对应的,你想转成什么样的类型都有对应的方法,哎,你可以To Bit to short对吧,大家看这个short to it啊,或者这个too long,这些都是可以直接去做对应的这个转换的啊,不是你想转成什么类型,直接调方法就可以。
05:25
然后下面一条呢,是强转的符号,只针对最近的操作数有效,这个如果我们要测一下的话,当然就是要一个计算啊,比方说我们先一个二那。大家想到啊,假如说现在我是一个两个数做这个计算啊,2.6。要加上3.7,那其实大家知道这两个本来是double类型嘛,这时候如果说我想得到一个int的话,那我们自然就是要直接把它做一个to int了,大家会发现这个你直接加在后边一个to in的话,它其实只针对3.7有效,2.6还是一个double对吧?所以现在相当于是3.7变成了一个整数,然后再跟2.6double类型再做加法,那当然得到的还是double类型啊,还是要提升上去啊,所以有可能想到我们现在要完整得到int类型的话,那就是每一个数据是不是都要做一次to int呀,但是这个也是有问题的。
06:27
每一个数如果都做一次to ink的话,这里的N2,我们得到的。大家会发现它其实得到的是五啊,因为前面我们说了,这不就是直接取整数部分吗?所以2.6得到的当然是二,3.7得到的是三,加起来当然是五了,但是我们想这个跟我们实际的结果差别有点大,我们实际得到的2.6加3.7其实是6.3嘛,6.3取整的话也应该是六,不应该是五啊。那怎么写呢?非常简单,就是要先对2.6和3.7做加法计算。
07:08
所以我们还是希望他俩先加,然后再去调用呼应的方法,那怎么样提升加法的优先级呢?加上一个小括号就可以了啊,所以这就是我们对应的这样的一个处理的方法,接下来我们打印N3。得到的自然不应该是加起来之后的六的一个结果啊,所以这个呃,这样的一个小技巧啊,在实际项目当中,在写代码的过程当中,还是非常的实用。然后另外呢,我们再来给大家介绍一个比较特殊的转换的过程,那就是所谓的数值类型和string类型之间的转换,字符串之间的转换,因为大家会想到有很多项目啊,很多代码里边我们都涉及到,诶读取数据啊,接收到的这个文本数据,或者说从文件里面读取出来的数据,它它都是一个string,那这个时候解析数据呢,我就要需要把它转换成一个数值,那如果说呃,现在我要对这个数据做一个做一个序列化,做一个保存,对吧,存放到文档,或者说做网络传输,那又需要把一个数值转换成一个string,那它们之间到底应该怎么转呢?单独的我们把它列出来啊。
08:29
数值类型和string类型转换,那么这一部分其实又分成了两部分,一部分就是住值string,这个非常的简单,其实大家知道一般我们平常也就直接这么用了啊,前面print line直接打印的时候也都是直接这么用的,一个数值怎么转string呢?这里其实就是直接把它to string了,对吧?诶怎么转呢?直接是不是叠加就可以了,哎,所以这里边非常简单啊,如果我想把一个比方说N,一个in等于27,如果想把它转成一个string的话,怎么转换,那再看到我就直接让它加上一个。
09:20
加上一个,呃,就是我们这里面的一个空引号,表示一个string就可以了,Print line s,当然就可以按照string把它做一个打印输出是最简单的这种方法啊。那反过来,如果要是一个string转换成一个数值,这个好像就稍微的麻烦一点,我们不可能直接用一个加号或者用一个什么就把它拆分出来,那怎么办呢?这非常简单,也是类似于强制类型转换的思路,直接调它的方法就可以了,比方说里边我们直接拟一个。一个M,它是一个int类型,这时候我们得到一个12是一个string,要转换成int怎么办呢?非常简单,直接调to方法啊,当然前面如果大家直接做那个就是一个转换的话,他知道也可以直接调这个toth string方法,对吧?哎,这个也是没有问题的,不过我们一般。
10:23
使用方便的话啊,直接做这个叠加就完事了,这个可能会更加的方便一些啊,是我们容易能够想到的,然后另外还有一个就是假如说我们当前得到的是一个float类型的这样的一个数据,比方说这里边一个12.3,那自然我们想到啊,这里边我需要去做一个这个to flow的操作,那假如说。我叫F2,假如我把它定义成int,一个12.3,可以直接to in做这样的操作吗?
11:03
这个大家需要注意一下哈,这样直接去做操作是不对的,因为。当前的十十二点三数,它只能解析成float或者哎,那这个时候本身编译这个是没有问题的啊,但是运行的过程当中,你会发现大家看这不是这不是编译的错误,这已经在运行了,但是运行到这一步的时候,你会发现12.3在这里边没有办法把我们,呃,就是对应的这一个值解析成一个int啊,那你得你得怎么样去做这样的一个解析呢?你可以先把它to float,或者先把它to double,然后再把它。呼应它做一个转换,这样的话可以得到对应的值了啊,所以必须要有这样的一个,就是符合当前数值定义规则的一个类型做转换才是可以。这就是关于SKY里边的强制类型转换相关的一些内容。
我来说两句