自动类型转换示例
示例1
public class AutoConvert {//自动类型转换
public static void main(String[]args){
//小精度自动转为大精度
int a = 'c';
double d=100;
System.out.println(a);//99
System.out.println(d);//100.0
System.out.println("-------------------------------------------------------");//分割线
//多种类型的数据混合运算情况
//系统会首先自动将所有的数据转换为容量最大的那个数据类型,再进行运算
//容量大小:int < float < double
//示例 :314+16.1
int i1 = 314; //true
// float d1 = i1+16.1;//false i1+16.1 => 结果类型是 double
// double d1 = i1+16.1;//(对,此行代码和下一行代码形式都可) i1+16.1 => 结果类型是double
float d1 = i1+16.1f ;//用F替换f也可,结果类型是float
// 输出
System.out.println(d1); //330.1
//以上得出结论,把大精度(容量大)的数据类型赋值给小精度(容量小)的数据类型
//就会报错,反之就会进行自动类型转换,如上代码所示
}
}
//(byte,short)和char之间不会相互自动转换
//特殊:当把具体数据赋值给byte时,先判断是否在byte范围内,若果是则ok
//若果是按变量赋值给byte就会判断数据类型,就会报错
示例2
public class AutoConvert02 {
public static void main (String []args){
// byte short char 它们三者可以计算,
//只要出现三者一个就满足,并不一定要都出现
// 在计算时首先转换为int类型
byte b1 = 2;
byte b2 = 2;
short s1 = 3;
// short q = b1 + s1; //报错,b1+s1 =>结果类型int
int q = b1 + s1; //ok, 结果为5
System.out.println(q);//5
//提升
//byte s2 = b1 + b2;//报错,b1 + b2=>结果类型为int
int s2 = b1 + b2; //2+2
System.out.println(s2); //4
}
}
强制类型转换示例
示例1
public class ForceConvert01 {//强制类型转换
public static void main (String []args){
int n1 = (int)2.9;
System.out.println("n1=" + n1);//①造成精度损失
//输出结果n1=2
int n2 = 300;
byte b1 = (byte)n2;
System.out.println("b1=" + b1);//②造成 数据溢出
//输出结果b1=44
}
}
示例2
public class ForceConvert02 {
public static void main (String[]args){
//强制转换符号只针对于最近的操作数有效,
// 往往会使用小括号提升优先级。
//示例
// int s = (int)15*3.6+6.6;//报错,(int)15 * 3.6 + 6.6 ==>double
int s = (int)(15*3.6+6.6);//ok,(int)(15*3.6+6.6) ==>int
System.out.println(s);//60
System.out.println("---------------------------------------------");
//char类型可以保存int的常量值(即具体数值),但不能保存int的变量值,
// 需要强转
//示例
char c1 = 97;
int h = 65; //整型变量h
//char n = h; //报错
char n2 = (char)h; //ok
System.out.println(n2);
}
}