类型转换
在Java中,当参与运算数据类型不一致时,就会进行数据转换
-
类型转换主要分为两类:自动类型转换(隐式)和强制类型转换(显式)
-
数据范围小的转为数据范围大的时将自动进行自动类型转换
自动类型转换
int a=10; long b=20L; a=b;//大类型赋给小类型,会报错
int a=10; long b=20L; b=a;//短赋给长不报错
int c=10; float f=12.5f; c=f;//会报错,float能表示的数据宽度更宽 c=(int)f;//强转小数保不了
float f=3.14F; double d=5.12; d=f;//编译器会将f转换为double,然后进行赋值 f=d;//double表示数据范围大,直接将float交给double会有数据丢失,不安全
强制类型转换
-
当进行操作时,代码需要经过一定的格式处理,不能自动完成.特点:数据范围大的到数据范围小的
int a = 10; long b = 100L; a = (int)b; // long-->int, 数据范围由大到小,需要强转,否则编译失败
float f = 3.14F; double d = 5.12; f = (float)d; // double-->float, 数据范围由大到小,需要强转,否则编译失败
byte b1 = 100; // 100默认为int,没有超过byte范围,隐式转换 byte b2 = (byte)257; // 257默认为int,超过byte范围,需要显式转换,否则报错
类型提升
不同类型的数据之间相互运算时,数据类型小的会被提升到数据类型大的
-
int与long之间:int会被提升为long
int a=10; long b=20L; int c=a+b;//会报错,首先提升a为long,和b相加,在赋给短的int会报错 long d=a+b;//正确 long+long赋给long
byte a=10;//10在赋值时就为int,为什么赋值不报错:因为编译器会帮你检查,如果字面值的范围是在自己表示的范围内,就不会报错 byte b=20; byte c=a+b;//会报错,因为a+b会先将a和b提升为int.int+int,赋给byte会报错 byte c=(byte)(a+b);//正确
小结
-
不同类型的数据混合运算,范围小的会提升成范围大的
-
对于short,byte这种比4个字节小的类型,会先提升成4个字节的int,在运算
String与int互转
1.int转String
int num = 10; // 方法1 String str1 = num + ""; // 方法2 String str2 = String.valueOf(num);
2.String转int
String str = "100"; int num = Integer.parseInt(str);//Integer是int的包装类,理解为强化版的int,里面有很多实用的方法