不同的基本类型直接可以相互转换:
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类型,再输出结果