3_(JAVA基础300集最全教程 学习)java 数据类型--一个类型强制转换的问题
程序员文章站
2022-04-18 13:37:10
...
1.运行以下代码会报:Type mismatch: cannot convert from int to byte
使用2目运算符的运算中,低于int型的都会转成int运算
高于int型的会转成最高的那个类型运算
使用3目运算符时,相对低级的数值会提升
所以应该修改为以下方式:
2.计算时溢出问题:
运行结果为:-154037760
看结果应该是溢出了。
运行结果为:-43103710720
最后已经转换为long类型了,问什么还是会溢出呢??
再把类型转换放在最前面:
运行结果为:257544000000
所以这里就要求我们在进行这类计算时,需要把类型转换放置到最前面,避免在计算中就已溢出。
3.类型的转换规则:
4. swhitch 支持的类型为整型和枚举型(在JDK7中新增String类型),当出错时则会报:Only convertible int values or enum variables are permitted
根据基本类型的转换规则,所以此处所有会自动转换为int类型的类型就可以,所以包含的类型为:byte,short,char,int及enum
public static void main(String[] args) { byte a=1; byte b=2; byte c=a+b; System.out.println(c); }
使用2目运算符的运算中,低于int型的都会转成int运算
高于int型的会转成最高的那个类型运算
使用3目运算符时,相对低级的数值会提升
所以应该修改为以下方式:
public static void main(String[] args) { byte a=1; byte b=2; byte c=(byte)(a+b); System.out.println(c); }
2.计算时溢出问题:
public static void main(String[] args){ long times=7000*60*24*365*70; System.out.println(times); }
运行结果为:-154037760
看结果应该是溢出了。
public static void main(String[] args){ long times=7000*60*24*365*70L; System.out.println(times); }
运行结果为:-43103710720
最后已经转换为long类型了,问什么还是会溢出呢??
再把类型转换放在最前面:
public static void main(String[] args){ long times=7000L*60*24*365*70; System.out.println(times); }
运行结果为:257544000000
所以这里就要求我们在进行这类计算时,需要把类型转换放置到最前面,避免在计算中就已溢出。
3.类型的转换规则:
char | | byte---->short---->int---------->long | | | | float--------->double int--->double int---->float丢失精度 long--->float丢失精度 long--->double丢失精度
4. swhitch 支持的类型为整型和枚举型(在JDK7中新增String类型),当出错时则会报:Only convertible int values or enum variables are permitted
根据基本类型的转换规则,所以此处所有会自动转换为int类型的类型就可以,所以包含的类型为:byte,short,char,int及enum