不同的基本类型直接可以相互转换:
1、自动类型转换(隐式类型转换):从小类型到大类型可以自动完成。类型大小关系如下图:
byte--short--int(char)--long--float--double
2、强制转换:从大类型到小类型需要强制转换符:
(需要转换成的类型)变量,但这样转换有可能会造成精度损失或者溢出。
自动转换示例:
int a = 100;
int b = 200;
long c = a + b; //自动将int转换为long
强制转换示例:
long l1 = 1024L;
int i = (int)l1; //需要加强制转换符,由于1024在int范围内没有产生溢出long l = 1024L * 1024 * 1024 * 4;
int j = (int)l; //会产生溢出
System.out.println(j); //结果为:0double pi = 3.1415926535897932384;
float f = (float) pi; //会造成精度损失
System.out.println(f); //结果为:3.1415927
数值运算时的自动转换
1、多种基本类型参与的表达式运算中,运算结果会自动的向较大的类型装换:
// 由于有long型的直接参与,整个表达式结果为long
long distance = 1000 * 365 *24 *299792458L;//由于有double型的直接量599.0参与,整个表达式结果为 double
double change = 800 - 599.0;double persent1 = 80/100;
//结果为0.0,右边都是int整型运算,结果也为int类型,结果为0,再赋值给double型,将0转换为0.0double persent2 = 80.0/100;
//结果为0.8,右边表达式有double型直接量参与,运算结果为double型。
两点规则:
1、整数直接量可以直接赋值给byte,short,char,但不能超出范围
2、byte, short, char型数据参与运算时,先一律转换为int再运算
System.out.println('2' + '2');
//100,'2'的码50,加上'2'的50,结果为:100
//char类型'2'在参与运算时先转成int类型,再输出结果