00:00
好同学,咱继续了啊,咱们上节课呢,说到这个,呃,说到这个整数型这一块,那么整数型这块呢,咱们写了两个例子了啊,第一个例子呢,这块呢,最主要是说我们整数型啊,有多种写法啊,十进制,八进制,二进制,16进制啊这种写法,但最常用的还是十进制啊了解一下,那么第二个呢,最主要是想告诉大家,在我们Java学当中啊,我们的这个。呃,这个整数型的字面值啊,或者是字面量,它默认呢上来,哎,它就会当做什么呀,我们的一个int类型来处理的。啊当来处理,它不会当做什么呀,类型来处理啊,也不会当做,也不会当做,它会当做来处理。等号右边先执行,执行完之后复制给左边的变量啊,是这样的一个过程,如果想表示long类型的自变量的话,你需要在后面加一个大写的L或者是小写L,小写L呢,这块啊,我们建议是呃,不要用啊,还是建议这个大写的L,因为小写L呢,和这个E啊长得有点像啊,有点像,那么这块呢,有这么一个题目呢,还是比较经典的一个题目啊,然后呢。
01:08
啊,Long类型的D变量等于2147483647,像这样的一个值啊,它是没有任何问题的,上来呢,它会把2147483647呢看作int类型对吧,而这个值呢,没有超出int类型的范围啊,可以直接付给他。那下边这个呢,实际上2147483648这个数字本身类型是可以存得下的啊,但是并不是说现在不是说你异变量啊,存得下存不下啊,是说你本身这个值如果后边不加L的话,像上面这种情况,它一上来就会把它当做什么呀。哎,当做一个int类型来来看待,那么2147483648已经超出了int类型取值范围啊,所以这个时候呢,会报一个错叫整数太大啊,整数太大,所以这个时候呢,我们需要在后面加一个L来处理这个问题啊。好,这是我们这个上节课所说的,那么接下来咱们继续再往下看啊,还有一些内容,TEST03。
02:06
那么这块呢,咱们还有一个什么知识点呢,来看一下啊,我们上一个知识点讲的是一个自动类型转换,对吧?哎,自动类型转换啊。呃。零三。好了。呃,小容量。可以直接赋值给大容量啊称为什么呢?自动类型转换啊,称为自动转换。那现在假如说啊,我们在这儿有个浪类型的,X等于100L。啊,这是。啊,不存在类型转换。
03:01
对不对,哎,这个叫做100L是浪类型。自变量。对不对,X是什么呀?是类型自变量啊,普通的赋值而已啊,那么接下来我们能不能这么干呢?比如说我们在这儿,哎,来一个什么呀,Int类型的Y等于X行不行呢?这样行吗?就之前我们上午说,因对A等于100。对吧。键盘坏了啊。键盘坏了,按下起不来了。因为A等于100,然后int类型的B呢等于A。是没问题的对吧,啊这个呢,就表示定义变量a int类型。负值100。
04:03
然后下边这个是什么呢?是将什么呢。将变量A中。保存的值100,复制一份。啊,复制一份。给谁呀,给变量。啊,将变量A中保存的这个值复制一份给变量。啊,就是普通的负值嘛,对不对,哎,我们把这个A呢,给它输出一下。然后呢,我们把这个B呢,哎,给它输出一下。先把这个知识点搞明白,搞明白。来,那么这块呢,先注释掉,我们先编译一下。Java c编译。Int t03.java然后Java去运行int t03走。没有任何问题对吧,那现在呢,反过来,如果说我提前定义好一个long类型的一个变量X,然后呢,我这个X对吧,通过等号的算式赋值给Y,那你这个行不行。
05:07
X。是浪类型对吧,占用什么呢。八个字节对不对。是不是,哎,占用八个字节。RR什么呢?Y变量呢?啊。而Y变量是int类型啊,占用什么呢?占用四个字节。那么在Java语言中。大容量。可以直接有俩字啊,可以直接赋值给。小容量吗?我们编译一下就知道了。点一下啊来int test03点加吧。
06:02
好,我们发现发现什么呀,叫做不兼容的类型啊,从浪转到转换到int可能会有损失。编译报错了,各位,不是运行报错了啊,是编译报错了。编译错误信息。不兼容类型,从long转换成int可能会有损失。那么通过这个测试,我们得出一个结论啊,它跟我们上面这个例子不太一样,上面这个呢。是说呀。我们int类型,小容量是可以直接转换成大容量的,叫自动类型转换,而到了我们这个例子之后啊,X变量的类型是浪类型,那么浪类型是没有办法直接啊复制给小容量的。啊,不允许。没有这种语法。啊,再加Y圆中。那么我们应该怎么去修改这个代码呢?诶。
07:01
好大容量转换成。小容量。啊,需要这这个要想什么呢?编译通过。就你你你现在不是编译过不去嘛,对不对,哎,你要想编译通过必须。啊,加什么呀,强制类型转换符。啊,进行强制类型转换。啊,注意就是小容量可以直接复制给大容量,成为自动力转换大容量。啊,不能直接复制给小容量,需要使用强制类型转换符进行强转啊进行强转。啊进行强转,但需要注意的是,但需要注意的是是什么呢?强制类型转换。
08:03
啊,或者说加什么呀,强制类型转换符之后,虽然编译通过了,但是运行的时候可能会损失什么呢精度。首先这个是有代价的啊,是有代价的,当然我们这个可能不会损失啊,不会损失,因为看这个数据数据太小啊对吧,浪类型的X等于100啊X转成哎转成转成我们的一个long类型,转成我们的一个int类型对吧。那你想一想,如果浪类型后边这个值它是什么呀?2147483647是最大值,那我八写个四八对吧?那这个值大家想想是不是已经超出音存取值范围了,如果拿着这个值在做强制类行转换的时候,就一定会损失精度的,但由于你这个地方写的是100L,那么100L呢?哎,我们进行强转的时候啊,哎,这个不会损失精度啊,因为它本身并没有超出int类型的一个取值范围,但是在这里测试的是什么呢?第一个就是说我们不能直接这样写,要想通过呀,你得这么干,加强类型转换符怎么加,在变量前面加个小括弧,小括号里边加上类型,这就是强制类型转换符啊,这个位置,这个就是强制类型转换符,加上去就能编译通过。
09:25
啊,加上去就能编译通过,但要记住啊,还是那句话,但是要记住。啊,编译虽然过了,但是运行时可能损失精度啊,可能会损失精度,来我们system.out点点print line打印输出什么呢?Y好,我们输出这个Y。那么这个Y值啊,应该不会损失精度吧,应该是100对不对啊,应该是100,来我们来看一看这次编译行不行,然后我们再去运行int test03走,好大家看程序也没有任何问题啊,也没有任何问题,就说在上一个例子和下边这个例子最主要讲了两个东西,一个东西叫做自动类型转换,一个叫做什么呀?强制类型转换小到大啊,小到大我们叫什么呀?叫做自动类型转换,大呢到小呢,我们需要加强制类型转换符啊,大容量转换成小容量,需要加强转换符转完,诶我们编译虽然能通过了,但是运行的时候可能会损失精度啊,会损失精度。
10:30
那么它是怎么强转的呢?底层是怎么进行强制类型转换的呢?那这个100所对应的二进制是多少啊?100所对应的二进制是多少?啊。各位。新建一下。
11:01
124。16。啊,三十二六十四。对不对,再往后是128了。那64加上32,这是多少?96是吧。96啊,96再加这个四是不是就100呀。啊,加上一个四。是不是就100啊。所以这个是不是一啊,这是不是一啊。哎,这是不是一啊,这是零吧,零。然后零零对不对啊,1100100。11001001100100。啊,1234567,再来个八。然后1234567812345678来复制一下一二。三四。
12:00
678,哎,这个就是浪类型。啊浪类型。Long类型100L,结果就是他各位啊,我往这儿拉一下啊,往这拉一下。你现在不是long类型的X等于100L吗?它这个浪类型是八个字节嘛,一个字节两个字节,三个字节,四个五个六个七个八个字节嘛,对不对,那么接下来啊。对应的这个int类型的。100。就你你这个八个啊,就是说这个八个啊以上的。Long类型100L。啊,强转,哎呀。强转为int类型。会自动啊将前面的记住啊,一定是前面的啊,前面的四个字节砍掉。
13:03
啊,会把前面的四个直接砍砍下来。所以呢,砍一个两个三个四个。它会存这个。最后是存这个。那么这个值大家想一想,是不是还是100啊?对吧,所以这个强转之后呢,它就不会有什么精度损失,最后的结果还是100还是100。那么这个例子最主要是给大家说的是什么呢?哎,就是自动转和强转,但是这里呢,需要注意啊,它强转的时候都是把前边的几个字节砍掉,前边的几个字节砍掉啊。
我来说两句