编程那点事编程那点事

专注编程入门及提高
探究程序员职业规划之道!

Java变量的类型转换

在程序中,当把一种数据类型的值赋给另一种数据类型的变量时,需要进行数据类型转换。根据转换方式的不同,数据类型转换可分为两种:自动类型转换和强制类型转换。

  • 自动类型转换

自动类型转换也叫隐式类型转换,指的是两种数据类型在转换的过程中不需要显式地进行声明。要实现自动类型转换,必须同时满足两个条件,第一是两种数据类型彼此兼容,第二是目标类型的取值范围大于源类型的取值范围。例如:

byte b = 3;
int x = b; //程序把byte 类型的变量b 转换成了int 类型,无须特殊声明

上面的语句中,将byte类型的变量b的值赋给int类型的变量x,由于int类型的取值范围大于byte类型的取值范围,编译器在赋值过程中不会造成数据丢失,所以编译器能够自动完成这种转换,在编译时不报告任何错误。

除了上述示例中演示的情况,还有很多类型之间可以进行自动类型转换,接下来就列出3种可以进行自动类型转换的情况,具体如下:

整数类型之间可以实现转换,如byte类型的数据可以赋值给short、int、long类型的变量,short、char类型的数据可以赋值给int、long类型的变量,int类型的数据可以赋值给long类型的变量。

整数类型转换为float类型,如byte、char、short、int类型的数据可以赋值给float类型的变量

其他类型转换为double类型,如byte、char、short、int、long、float类型的数据可以赋值给double类型的变量。

  • 强制类型转换

强制类型转换也叫显式类型转换,指的是两种数据类型之间的转换需要进行显式地声明。当两种类型彼此不兼容,或者目标类型取值范围小于源类型时,自动类型转换无法进行,这时就需要进行强制类型转换。

public class Example01 {
    public static void main(String[] args) {
        int num = 4;
        byte b = num;
        System.out.println(b);
    }
}

编译程序报错

程序编译出错

出现这样错误的原因是将一个int型的值赋给byte类型的变量b时,int类型的取值范围大于byte类型的取值范围,这样的赋值会导致数值溢出,也就是说一个字节的变量无法存储四个字节的整数值。

在这种情况下,就需要进行强制类型转换,具体格式如下:

目标类型 变量 = (目标类型)值

将例中第4行代码修改为下面的代码:

byte b = (byte) num;

再次编译后,程序不会报错,运行结果如图所示。

程序编译成功

需要注意的是,在对变量进行强制类型转换时,会发生取值范围较大的数据类型向取值范围较小的数据类型的转换,如将一个int类型的数转为byte类型,这样做极容易造成数据精度的丢失。

未经允许不得转载: 技术文章 » Java编程 » Java变量的类型转换