什么是自动类型转换,为什么要学习自动类型转换?
类型范围小的变量,可以直接赋值给类型范围大的变量
自动类型转换的底层原理
首先我们看第一个变量a,我们知道byte行变量它占用1一个字节的内存,一个字节的内存就是8位,也就是把12转换成二进制转换成00001100,我们再看int形变量,我们知道int变量它占用4个字节,也就是32位,把12存入变量b占用四个字节,其实只用到了一个字节,因为其他三个字节全部补0,不管是8位还是32位存入的数值都是12;
这里注意范围小的数据类型可以直接赋值给范围大的数据类型,字符型char 类型可以直接赋值给int类型,因为char的底层就是二进制,而且char只占用两个字节,而int占用四个字节,所以直接可以把char类型的数据赋值给int类型;
来看下案例:
输出结果:
字符型转换为整型:
输出结果:
1.为什么需要进行类型转换:
存在不同类型的变量赋值给其他类型的变量
2.自动类型转换是什么样的?
类型范围小的变量,可以直接赋值给类型范围大的变量
表达式的自动类型转换:
在表达式中,小范围的类型的变量会自动转换成当前较大范围的类型再运算。
注意事项:
1.表达式的最终结果类型由表达式中的最高类型决定。
在表达式中,byte,short,char 是直接转换成int类型参与运算的
案例:
公司面试真题:
我们可以看到byte num 这里已经报红了,这是因为变量i是字节型,j也是字节型,但是他们在参与表达式运算的时候会自动转换成int类型,所以i+j这个表达式要用int类型的盒子来存储
为什么要把他们当int来看呢?
如果声明两个变量它的范围都符合-128~127 但是当两个变量相加的时候是不是就会超出字节型变量-128~127 比如 byte a = 126 byte b= 127 两个都没有 超出但是相加就超出了128;
1.表达式的自动类型转换是什么样子的?
小范围的类型会自动转换成大范围的类型运算。
2.表达式的最终结果类型式由谁决定的?
最终类型由表达式的最高类型决定。
3.表达式的哪些类型转换是需要主义的
byte short char 是直接转换成int类型参与运算。
强制类型转换:
问题:
类型范围大的数据或者变量,不能直接赋值给类型范围小的变量,会报错;
强制类型转换:
可以强行将类型范围大的变量,数据赋值给类型范围小的变量。
强制类型转换底层原理:
我们声明了一个变量a,首先计算机会在内存给变量a分配一个地址,因为a是int整型,所以它的字节是4个字节,他的位数是32位。
这里声明一个字节型变量b,计算机会在内存里生成一个地址,分配给b,由于b是字节型数据类型,所以他的字节数是一个字节,位数是8,有效位数是7
最终变量byte b会把 int a 强转成byte 类型
第二种强制转换数据类型情况:
输出结果:
来看这个例子:
首先我们声明一个整型变量i 赋值为 1500 这个时候计算机从内存里开辟了一个地址空间:
就是
然后将i强转后我们会发现j的第一位为1,所以j得出的就是一个负数,至于为什么是36,我会在后期高级程序讲解,所以请关注我~
注意事项:
强制类型转换可能造成数据(丢失)溢出
浮点型强转成整型,直接丢到小数部分,保留整数部分返回
定义了一个浮点型变量a,赋值99,将a强转为浮点型赋值给b ,然后输出其,发现结果是99,那么就应证了浮点型强转成整型,直接丢掉小数部分,保留整数部分返回。
1.什么是强制类型转换?
可以强行将范围大的变量,数据赋值给类型范围小的变量
2.强制类型转换注意点?
可能数据丢失
小数强制转换成整数是直接截断小数保留整数。