自动类型提升&手动强制类型转换
| 一、长短数值运算中,短的自动提升&想要长变短的手动强制转换格式 |
|
【】在基本运算的两端需要是同类型才可以运算,等号两端不是同类型数据不能运算 |
| 【】只有两端都是数值类型,才有可能不是同类型也能运算。其余都不能运算。 |
|
1自动类型提升(短的和长的运算,短的可以自动变成长的) 转换时以占用内存较大的为主,都变成长的,可以装入长的数据类型里。自动提升后的长的结果能装入短的吗?
【】自动提升后,得到的长的结果,如果装入长的的int,能装下,如果装入短的byte就无法装下,丢失精度,丢失三个字节。编译报错。 |
| 2手动强制类型转换 |
|
【】将长的运算结果强制丢掉多余字节,转换为需要的短的数值类型 【】运算式左侧注明需要转换成的短的数据类型,都要加小括号。
【】但是风险在于,如果长的结果的有效数据短的装不下,就会丢失导致错误 |
| 二、字符类型数据的数字性---字符类型数据可参与自动提升和强制转换 |
|
【】二进制和生活中文字的对应表,也叫做编码表。这些编码就是字符类型的数据。字符本质就是数字。 这张表里面只有美国的文字,全名叫做美国信息标准交换码ASCII(American Standard Code for Information Interchange,美国信息互换标准代码)
【】由于字符类型数据是一个两个字节的数,所以可以参与运算,这是字符类型的特殊之处 【】'a'是2字节的二级制数+1,就会自动提升到32位和默认int类型的1运算,得到32位的一个计算结果 【】运算后自动提升想要回到字符类型,可以使用强制转换(char)('a'+1) 【】想要单纯知道'a'的代表数字,可以'a'+0,自动提升后获取 |
| 三、类型转换的面试题 |
|
【】这个运算报错
【】4是int类型,编译器会判断4这个数值是否在byte的取值范围内,如果在,编译器底层会做一个自动转换过程,会把4默认强转byte,把最后一个字节赋到b这个变量中 【】b=b1+b2,因为右边不确定,右边全是变量,无法确定是否在b的byte两字节的取值范围内,因此无法检查。 |
|
【】这个运算不会报错
【】同样面临右边全是变量的情况,int却没这个问题。因为作为默认类型的int类型,一旦超出就会把超出的第33位舍弃,变成其他值(是错误的数值),但可以编译通过。 |








浙公网安备 33010602011771号