类型转换
基本数据类型表示范围大小排序:
在变量赋值及算术运算的过程中,经常会用到数据类型转换,其分为两类:
-
隐式类型转换
-
显式类型转换
1 隐式类型转换
情形1:赋值过程中,小数据类型值或变量可以直接赋值给大类型变量,类型会自动进行转换
案例展示:
package com.briup.chap02;
public class Test081_ImplicitTrans {
public static void main(String[] args) {
// int类型值 赋值给 long类型变量
long num = 10;
System.out.println(num);
// float类型值 赋值给 double类型变量
double price = 8.0F;
System.out.println(price);
char c = 'a';
// char 赋值给 int
int t = c;
System.out.println(t);
// 下面会编译报错
//float pi = 3.14;
//int size = 123L;
//int length = 178.5;
}
}
情形2:byte、short、char类型的数据在进行算术运算时,会先自动提升为int,然后再进行运算
案例展示:
public static void main(String[] args) {
byte b = 10;
short s = 5;
// (byte -> int) + (short -> int)
// int + int
// 结果为 int
int sum = b + s;
// 下一行编译报错,int 无法自动转换为 short进行赋值
//short sum2 = b + s;
System.out.println(sum);
}
情形3:其他类型相互运算时,表示范围小的会自动提升为范围大的,然后再运算
案例展示:
public static void main(String[] args) {
byte b = 10;
short s = 5;
double d = 2.3;
// (byte10->int10 - 5) * (short->int5) -> 5 * 5 = 25
// int25 + double2.3
// double25.0 + double2.3
// 结果:double 27.3,必须用double变量来接收该值
double t = (b - 5) * s + d;
// double赋值给float,编译报错
// float f = (b - 5) * s + d;
System.out.println(t);
}