- /*
- 关于基本数据类型转换规则:
- 1. 8种基本数据类型除boolean类型以外均可以相互转换.
- 2. 小容量向大容量转换叫作自动类型转换:
- byte<short<int<long<float<double
- char<
- 3. byte,short,char作混合运算的时候,各自都先转换成int在作运算
- 4.大容量向小容量转换是强制类型转换,须要增强制转换符,
- 编译虽然经过,运行期可能损失精度。谨慎使用。
- 5.若是整数没有超出byte,short,char的取值范围,能够直接将这个整数赋值给byte,short,char
- 6.多种数据类型作混合运算,先转换成容量最大的那种再作运算。
- */
- public class DataTypeTest06 {
- public static void main(String[] args) {
- //出现错误,1000超出了byte的范围
- //byte a = 1000;
- //正确,由于20没有超出byte范围
- //因此赋值
- byte a = 20;
- //变量不能重名
- //short a = 1000;
- //正确,由于数值1000没有超出short类型的范围
- //因此赋值正确
- short b = 1000;
- //正确,由于默认就是int,而且没有超出int范围
- int c = 1000;
- //正确,能够自动转换
- long d = c;
- //错误,出现精度丢失问题,大类型-->>小类型会出现问题
- //int e = d;
- //将long强制转换成int类型
- //由于值1000,没有超出int范围,因此转换是正确的
- int e = (int)d;
- //由于java中的运算会会转成最大类型
- //而10和3默认为int,因此运算后的最大类型也是int
- //因此是正确的
- int f = 10/3;
- //声明10为long类型
- long g = 10;
- //出现错误,多个数值在运算过程当中,会转换成容量最大的类型
- //如下示例最大的类型为double,而h为int,因此就会出现大类型(long)到小类型(int)
- //的转换,将会出现精度丢失问题
- //int h = g/3;
- //能够强制转换,由于运算结果没有超出int范围
- //int h = (int)g/3;
- //能够采用long类型来接收运算结果
- //long h = g/3;
- //出现精度损失问题,如下问题主要是优先级的问题
- //将g转换成int,而后又将int类型的g转换成byte,最后byte类型的g和3运算,那么
- //它的运算结果类型就是int,因此int赋值给byte就出现了精度损失问题
- //byte h = (byte)(int)g/3;
- //正确
- //byte h = (byte)(int)(g/3);
- //不能转换,还有由于优先级的问题
- //byte h = (byte)g/3;
- //能够转换,由于运算结果没有超出byte范围
- //byte h = (byte)(g/3);
- //能够转换,由于运算结果没有超出short范围
- short h = (short)(g/3);
- short i = 10;
- byte j = 5;
- //错误,short和byte运算,首先会转换成int再运算
- //因此运算结果为int,int赋值给short就会出现精度丢失问题
- //short k = i + j;
- //能够将运算结果强制转换成short
- //short k = (short)(i + j);
- //由于运算结果为int,因此能够采用int类型接收
- int k = i + j;
- char l = 'a';
- System.out.println(l);
- //输出结果为97,也就是a的ascii值
- System.out.println((byte)l);
- int m = l + 100;
- //输出结构为197,取得a的ascii码值,让后与100进行相加运算
- System.out.println(m);
- }
- }