00:00
接下来我们要讲的是这一章的最后一个内容,也是最为重要的一个内容啊,就是所谓的数据类型转换,那首先我们要讲SKY拉里面的数据类型转换,我们先来回忆一下Java里边是怎么做的,那这里面给大家列出了一道非常经典的Java的面试题,这道题目呢,主要考察的其实就是所谓的。Java里边的自动类型转换,或者叫影视类型转换,我们看一下这道题目是怎么样的啊,其实代码非常简单,首先在没方法里边声明定义了一个BAT类型的变量B啊,它的值是十,然后呢,把它作为参数传到一个test的方法里面去做调用,那那接下来我们其实就看到了啊,这个test方法这里还涉及到了Java里边的另外一个知识点,就是方法的重载啊,我们看到给定不同的参数类型或者参数不同的个数啊,可以定义相同的相同名称的同样的这个方法啊,那在调用的过程当中呢,就要判断当前传入的参数个数和类型到底是什么样的匹配起来的,对应的那个方法就是我们真正调用的方法。
01:12
那大家看到现在呢,这个test有呃,重载了它的这个四四种不同的实现啊,那我们看到可以传入的参数是一个BAT类型,也可以是short类型,也可以是char,也可以是int,那这里边就有一个问题了,如果这里边我们B本身是BAT类型的话,那调用这个test的方法的时候,到底调的是哪个呢?啊,我们接下来在代码里边给大家做一个具体的实现啊,简单的来测试一下,大家就可以看清楚到底这是怎么怎么一回事了啊,所以接下来我们还是在Java目录下边new一个Java class,今天我们做一个测试,主要是测试这个类型转换啊的Type Conversion。
02:00
我们还是先把main方法写出来啊,那首先我们要定义的是一个BY类型的D,然后接下来直接调用test方法把B传进去,下边呢,我们就定直接定义这个static方法啊,也是VO,那么对应的test首先定义一个F类型的参数B里边的话,我们就直接输出BBBB啊,这是我们基本的一个实现,那其实大家知道,如果我只有这一个方法的话,直接执行,不然输出的就应该是bbb,这肯定是没有任何问题的啊,那接下来假如说我还有这个方法重载,里边有了不同的其他的参数类型,比方说dot,这里边输出的是SS,再来一个char,输出的是CCCCCC,最后。
03:00
后还有int类型,输出的是iii,这种情况下,哎,那到底我们这里边如果运行的话,输出的是什么呢?啊,其实这个很简单啊,输出的肯定还是bbb嘛,因为当前方法重载,你不就是要看当前参数到底类型是什么吗?类型很明显是BAT呀,是bet,当然就是调这个,呃,参数是BAT的这个方法,所以输出BBBB这个没有任何问题,现在关键的问题来了啊,这一道面试题其实重点考察的还不是这些啊,重点考察的是,那如果我要把当前艾特类型的参数这种实现这个方法实现去掉。那接下来这样一段代码还能正确执行吗?诶,大家发现没有问题,可以正确执行,那到底我应该调用的是哪个方法,输出什么样的内容呢?那这就是我们要考察的数据类型要做转换了,当前既然没有匹配起来的以BAT作为参数的方法,那当然我就是需要把BAT类型转换成一个这里边已经给我们实现了的对应的那个类型作为参数传进去,然后调用对应的方法。那到底把BA转换成什么呢?转换成short char还是int呢?
04:15
这就涉及到了自动类型转换时候的一个原则,或者说一个顺序啊,大家会想到在Java里边自动类型要做做这个自动类型的数,数据类型的转换的话,那其实一个原则是要把数据类型从低精度的类型提升到高精度的数据类型,所以它提升的过程也是先找离得最近的更高精度的那个数据类型去做提升的,那当前的差大家知道它,呃,BAT啊,本身只有。一个字节,那么他如果要提升的话,那显然它往上最离得最近的就应该是占据两个字节的short类型。啊,我们在idea里面,其实这个都不是问题啊,大家看到一目了然,当前这三个重载的方法,变量的就是上面这个short参数的test方法,那所以当前调用的当然就是short了,如果现在大家如果做一个执行的话,显然就是SSS啊,所以大家看到做了这个类型转换之后啊,首先提升成了short。
05:18
那假如说short也没有了的话,接下来应该调用什么呢?你把它转换成叉吗?大家知道差也是两个字节对吧?哎,那大家注意不是啊,Java里边我们的类型系统转换的过程当中,差它是字符,它跟我们的平常使用的这个整数类型啊,Bit short inlo,呃,相当于它是独立的,它不属于一套系统,所以当前的BAT如果要是没有short提升成两个字节的话,它其实会直接提升成四个字节的int。哎,所以接下来如果我们把这个shot也注掉的话,这里输出的是iiii。这就是关于我们这道题啊,能够输出的结果啊,当然了大家会想到,如果说我们这里边还有一个叉类型的C。
06:06
然后接下来如果我要直接调用这个test z的话,这里应该到底是输出什么呢?哎,当然如果我们把这个全部展开,他会想到前面的B,当然输出的是bbb,那这里的C它既然是差类型嘛,有它对应的类型,当然这里输出的就是CCCCCC了啊,所以这里大家看的非常明显啊,基本的场景下当然就是有什么类型输出什么类型,那前面如果要是这个对应的BAT没有这个实现了啊,没有bet类型的参数了,大家知道它首先会提升成short,然后进一步会提升成int,那假如说没有这个C对应的实现,就差类型,它可以做自动类型转换吗?前面我们说它跟这个不是一个系统对吧?但它其实也可以做类型转换。它会提升成直接提升成int啊,所以这是。
07:01
之前我们在Java里边已经学习过的啊,直接这么输出的话,就是BAT先提升成short,然后short再提升成int,就是按照顺序一个一个来的,而如果是差类型的话,要提升的话,直接提升成。这就是关于Java里边的自动类型转换。
我来说两句