1.自动类型转换
自动类型转换:容量小的数据类型可以自动转换为容量大的数据类型。在图中,黑色的实线表示无数据丢失的自动类型转换,而红色的虚线表示在转换时可能会精度的损失。
特例: 可以将整型常量直接赋值给byte, short, char等类型变量,而不需要进行强制类型转换,只要不超出其表数范围
Short b = 12; //合法
short b = 1234567; //非法
2.强制类型转换(Cast)
强制类型转换,又被称为造型,用于显式的转换一个数值的类型. 在有可能丢失信息的情况下进行的转换是通过造型来完成的,但可能造成精度降低或溢出。
强制类型转换的语法格式:“(type)var”,运算符“()”中的type表示将值var想要转换成的目标数据类型
当将一种类型强制转换成另一种类型,而又超出了目标类型的表示范围,就会被截断成为一个完全不同的值
3.基本类型转化时常见错误和问题
操作比较大的数时,要留意是否溢出,尤其是整数操作时(详细请见代码)
代码示意:
public class TestCastType{ public static void main(String[] agrs){ //转型 byte a = 100; //超过byte的范围,精度损失错误 //byte b = 300; //char c = -3; char d = 'A'; int e = d; System.out.println(d); System.out.println(e); //测试强制转型 int f = -100; char g = (char)f; //-100已经超过char的表数范围,所以转换成完全不同的值 System.out.println(g); //类型提升 做所有的二元运算符(+-/*%),都会有类型提升的问题 int c1 = 100; long c2 = 200; long c3 =(long)(c1+c2);//不做类型转换则会报错:精度损失 //一个活80岁的人一辈子脉搏的跳动次数 int times = 75; long total = 75L*60*24*365*80; System.out.println(total); //特别说明:在转型时候最好在75后面就强制转换为long,避免在数据相乘过程中超过表数范围造成转型失败 } }