Java语言是强类型语言,变量的数据类型被指定后,会一直保持该数据类型。同时Java语言对参与赋值运算和算术运算的操作数数据类型要求必须一致,当参与运算的操作数数据类型不一致时,就需要对操作数的数据类型进行类型转换,把参与运算的操作数转换为同一数据类型后,再进行运算。
例如:
double PI = 3.14; int radius = 5; double s; s = PI * radius * radius;
在上面的例句中,表达式PI * radius * radius有二个操作数,PI是double类型,radius是整数类型。因为操作数的数据类型不一致,Java编译器会对数据类型做强制转换,将radius的整数类型强制转换为double类型。
这种转换是Java编译器自动进行的,程序员不需要进行任何操作,由Java编译器自动完成,这种类型的转换也称为隐式转换。
由于不同的数据类型存储空间和表示的数值精度是不同的,因此在数据类型的转换过程中,就会存在数值精度丢失和数值溢出的问题。例如:double类型转换为float类型,数值精度就会丢失;long类型转换为int类型时,如果long类型变量存储的数值超过了int类型能够存储的数值范围,就会发生数值溢出。
为了避免在转换过程中发生数值精度丢失和溢出的问题,隐式转换都会遵循从低级数据类型到高级类型的转换规则,也可以说是从数值存储精度小的类型到存储数值精度高的类型转换。这些数据类型按数值存储范围大小依次为:
byte->short->int->long->float->double
下表列出了数据类型隐式转换的一般规则:

案例1:在eclipse下新建项目PbaseUnit7,创建包unit,在unit包下创建Java类DataTypeChangeSample,在main方法中声明不同类型的变量,进行各变量间的算术运算,考查运算过程中的类型的隐式转换。代码如下:
/**
* @Title: DataTypeChangeSample.java
* @Package unit
* @Description: Java基础知识课程案例
* @author 编程训练营
* @date 2019年12月2日
* @version V1.0
*/
package unit;
/**
* @ClassName: DataTypeChangeSample
* @Description:数据类型转换(隐式转换)案例1
* @author 编程训练营
* @date 2019年12月2日
*
*/
public class DataTypeChangeSample {
/**
* @Title: main
* @Description: Java程序入口main方法
* @param @param args 参数
* @return void 返回类型
* @throws
*/
public static void main(String[] args) {
// 声明byte类型的变量,并初始化为byte所表示的最大值
byte tempByte = 65;
// 声明int类型的变量
int tempInt = 34;
// 声明float类型的变量
float tempFloat = 29.6f;
// 声明double类型的变量
double tempDouble = 86.69;
System.out.println("byte类型的数据与float类型的进行相加运算,运算结果为:" + (tempByte+tempFloat));
System.out.println("float类型的数据与double类型的进行相加运算,运算结果为:" + (tempFloat+tempDouble));
System.out.println("byte类型的数据与int类型的进行相加运算,运算结果为:" + (tempByte+tempInt));
}
}程序执行结果如下图所示:
