数据类型转换存在的意义
数据类型转换,在实际的应用开发中,常常会对不同类型的数字类型进行计算,所以就用到了数据转换。一方面,使用算术计算符对数字进行运算时,系统在适当的时候回进行自动转换;另一放方面,程序开发人员还可以强制进行数据转换,这个操作有时候灰出现精度丢失等问题
数据转换的依据:取决数据的取值范围
byte -> short -> int ->long ->float ->double
char->
注意:
1.boolean 类型不能够参与类型转换
2.char 和byte/short 只有交集关系,没有子集关系
1.自动类型转换
将小类型的数据转换为大类型的数据,系统会自动转换
// 由于右边int类型的数值正好在byte范围之内,所以系统帮我们做了转换
byte by2 = 127;
System.out.println(by2);
2.强制类型转换
将大类型的数据转换为小类型的数据,会编译报错
解决办法:强制类型转换
格式:
目标类型 变量名 =(目标类型) 被转换的类型;
强制类型转换会出现的问题:
1.精度的丢失
2.数据的溢出
3.byte/short特例
// 由于右边int类型的数值正好在byte范围之内,所以系统帮我们做了转换
byte by2 = 127;
System.out.println(by2);
short s = 32767;
System.out.println(s);
4.byte/short和char 参与转换,都需要强制类型转换
//byte /short/char类型转换比如强制转换,因为他们在取值范围只存在交集关系,不存在父子集关系。
byte by3 = 65;
char ch3 = (char)by3;
System.out.println(ch3);
char ch4 = '0';
byte by4 = (byte)ch4;
System.out.println(by4);
5.表达式类型提升
当表达式的运算符两边类型不一致的时候,结果的类型会自动向高类型转换
// 当表达式的运算符两边类型不一致的时候,结果的类型会自动向高类型转换
i5 = (int)(i5 + f3);
System.out.println(i5);
6.当byte short char 之间参与运算的时候,底层都会转换为int 类型来计算
// 6.当byte short char 之间参与运算的时候,底层都会转换成int类型来计算
byte by6 = 97;
short s2 = 1;
char ch6 = 'a';
short s3 = (short)(by6 + s2 + ch6);
System.out.println(s3);
7.boolean类型不能够参与运算和转换
// 7.boolean类型不能够参与运算和转换,但是在JavaScript中可以
boolean bool = true;
// int i6 = bool + 1;
// int i6 = (int)bool;
8.字符串在参与运算中的转换问题,字符串相加是拼接操作
System.out.println(2 + 2 + "22" + 2 + 2); // 输出结果为42222。 当字符串与其他类型拼接以后就成为一个新的字符串
9.变量计算和常量计算问题
变量相加,系统无法判断具体的结果
//两个不同类型的变量相加,通不过编译器,
byte bbb2 = 10;
short sss2 = 20;
short ttt = bbb2 + sss2;
System.out.println(ttt);
//报错误代码
//需要强制标明类型
常量相加,在编译时期,系统就会运算结果
//编译器对常量进行了计算,然后int类型的30没有超byte的范围,实行了byte特列
byte b3 = 10 + 20;
System.out.println(b3);
//正确代码
本作品采用《CC 协议》,转载必须注明作者和本文链接