首页 > 编程笔记 > Java笔记 阅读:9

Java类型转换(自动类型转换和强制类型转换)

在 Java 中,类型转换是将一个值从一种类型更改为另一种类型的过程。

例如,可以将 String 类型的数据“457”转换为数值型,也可以将任意类型的数据转换为 String 类型。

如果从低精度数据类型向高精度数据类型转换,则永远不会溢出,并且总是成功的;而把高精度数据类型向低精度数据类型转换时,则会有信息丢失,有可能失败。

数据类型转换有两种方式,即自动类型转换(隐式类型转换)与强制类型转换(显式类型转换)。

Java自动类型转换

从低级类型向高级类型的转换,系统将自动执行,程序员无须进行任何操作。这种类型的转换被称为自动类型转换(隐式类型转换)。

下列基本数据类型会涉及数据转换,不包括逻辑类型和字符类型。这些类型按精度从低到高排列的顺序为:

byte < short < int < long < float < double

例如,可以将 int 型变量直接赋值给 float 型变量,此时 int 型变量将自动转换成 float 型变量。代码如下:
int x = 50;
float y = x; // 将 x 赋值给 y,y 的值为 50.0
自动转换也要遵循一定的规则来解决在什么情况下将哪种类型的数据转换成另一种类型的数据。下表列出了各种数据类型自动转换的一般规则。

表:自动类型转换规则
操作数 1 的数据类型 操作数 2 的数据类型 转换后的数据类型
byte、short、char int int
byte、short、char、int long long
byte、short、char、int、long float float
byte、short、char、int、long、float double double

下面通过一个简单实例介绍数据类型自动转换。

【实例】使用隐式转换提升数值的精度。
在项目中创建类 Conver,在主方法中创建不同数值型的变量,实现将各变量自动转换。
public class Conver {
    public static void main(String[] args) {
        byte mybyte = 127; // 定义byte型变量mybyte,并把允许的最大值赋给mybyte
        int myint = 150; // 定义int型变量myint,并赋值
        float myfloat = 452.12f; // 定义float型变量myfloat,并赋值
        char mychar = 10; // 定义char型变量mychar,并赋值
        double mydouble = 45.46546; // 定义double型变量,并赋值
        // 输出运算结果
        System.out.println("byte 型与float 型数据进行运算结果为:" + (mybyte + myfloat));
        System.out.println("byte 型与 int 型数据进行运算结果为:" + (mybyte * myint));
        System.out.println("byte 型与char 型数据进行运算结果为:" + (mybyte / mychar));
        System.out.println("double型与char型数据进行运算结果为:" + (mydouble + mychar));
    }
}
运行结果如下:

byte型与float型数据进行运算结果为:579.12
byte型与int型数据进行运算结果为:19050
byte型与char型数据进行运算结果为:12
double型与char型数据进行运算结果为:55.46546

要理解类型转换,读者可以这么想象,大脑前面是一片内存,源和目标分别是两个大小不同的内存块(由变量及数据的类型来决定),将源数据赋值给目标内存的过程,就是用目标内存块尽可能多地套取源内存中的数据。

Java强制类型转换

当把高精度的变量的值赋给低精度的变量时,必须使用强制类型转换(又称显式类型转换)。语法如下:

(类型名)要转换的值

例如,将高精度数字转换为低精度数字。代码如下:
int a = (int)45.23;       // 此时输出 a 的值为 45
long y = (long)456.6F;    // 此时输出 y 的值为 456
int b = (int)'d';         // 此时输出 b 的值为 100
执行强制类型转换时,可能会导致精度损失。除 boolean 类型外,其他基本类型都能以强制类型转换的方法实现转换。

当把整数赋值给一个 byte、short、int、long 型变量时,不可以超出这些变量的取值范围,否则必须进行强制类型转换。例如:
byte b = (byte)129;

相关文章