IT兄弟连 Java语法教程 数据类型转换

  • 2019 年 10 月 5 日
  • 笔记

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

本文链接:https://blog.csdn.net/ITXDL123/article/details/95120529

类型转换是将一个值从一种类型更改为另一种类型的过程。例如,可以将String(字符串,字符串是Java中非常特殊的数据类型,字符串属于引用类型,但是可以像基本类型一样使用字面值赋值)类型数据“456”转换为一个数值型,而且可以将任意类型的数据转换为String类型。

如果从低精度(比如byte,最大值127)数据类型向高精度(比如short,最大值32767)数据类型转换,则永远不会溢出,并且总是成功的;而把高精度数据类型向低精度数据类型转换则必然会有信息丢失,有可能失败。

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

隐式类型转换

从低级类型向高级类型的转换(比如byte向int转换),系统将自动执行,程序员无需进行任何操作。这种类型的转换成为隐式转换(自动类型转换)。下列基本数据类型会涉及数据转换,不包括逻辑类型和字符类型。这些类型按精度从低到高排列的顺序为byte<short<int<long< float<double。

例如如下代码;使用int型变量为float型变量赋值,此时int型变量将隐式转换成float型变量,如下所示:

int x = 50; //声明int型变量x

float y = x; //将x赋值给y

此时执行输出语句,y的结果将是50.0。

隐式类型的转换也要遵循一定的规则,来解决在什么情况下将那种类型的数据转换成另一种类型的数据。表11列出了各种数据类型转换的一般规则。

下面通过一个简单实例介绍数据类型隐式转换

例:创建类Conver,在主方法中创建不同数值型的变量,实现将各变量隐式转换。

public class Conver{

public static void main(String[] args){

byte myByte = 127;

int myInt = 150;

float myFloat = 452.12f;

double myDouble = 45.46546;

char myChar = 10;

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));

}

}

编译并运行该程序,控制台将显示如图15所示的内容。

图15 Conver运行结果

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

显示类型转换

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

(类型名)要转换的值

下面通过几种常见的显示数据类型转换实例来说明明

例:将不同的数据类型进行显示类型转换,代码如下:

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;

上面代码中字面量129已经超出了byte的最大支持范围,所以必须使用显示类型转换才能赋值给byte型变量b。