Logo

郎哥编程

隐式类型转换

2019-12-07 915

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

下表列出了数据类型隐式转换的一般规则:

image.png


案例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));
    }
 
}

程序执行结果如下图所示:

image.png


代码在线纠错(通义千问 qwen-max)

支持粘贴多个代码文件,提交后由阿里云通义千问自动分析代码漏洞、语法错误、逻辑问题并给出修改建议。
您已解锁 AI 代码纠错功能,可正常使用!

评论区

登录 后发表评论
暂无评论