Java提供了各种数据类型来存储各种数据值。它提供了7种原始数据类型(存储单个值),如下所示-
布尔值-存储代表true或false的1位值。
字节-存储二进制补码整数,最多8位。
char-存储最多16位的Unicode字符值。
short-存储最多16位的整数。
int-存储最多32位的整数。
long-存储最多64位的整数。
float-存储最多32位的浮点值。
double-存储最多64位的浮点值。
将一种原始数据类型转换为另一种原始数据类型称为类型转换。类型转换有两种类型-
加宽-转换的较低的数据类型到一个更高的数据类型被称为扩大。
缩小-将较高的数据类型转换为较低的数据类型称为缩小。
每当您将较低的数据类型分配给较高的数据类型时,Java编译器都会隐式转换它并将其分配给指定的变量。
public class CastingExample { public static void main(String args[]){ char ch = 'C'; int i = ch; System.out.println("Integer value of the given character: "+i); float f = 10021.224f; double d = f; System.out.println("double value: "+d); } }
输出结果
Integer value of the given character: 67 double value: 10021.2236328125
但是,当您尝试将较高的数据类型分配为较低的数据类型时,在编译时您会收到一条错误消息:“不兼容的类型:可能的有损转换”
在以下示例中,我们尝试将整数值分配给字符值-
public class CastingExample { public static void main(String args[]){ int i = 67; char ch = i; System.out.println("Character value of the given integer: "+ch); } }
编译时,上面的程序生成以下错误。
CastingExample.java:4: error: incompatible types: possible lossy conversion from int to char char ch = i; ^ 1 error
在下面的示例中,我们尝试为float变量分配一个double值。
public class CastingExample { public static void main(String args[]){ double d = 10021.224d; float f = d; System.out.println("double value: "+f); } }
编译时,上面的程序生成以下错误。
CastingExample.java:22: error: incompatible types: possible lossy conversion from double to float float f = d; ^ 1 error
因此,要将较高的数据类型分配为较低的数据类型,您需要使用强制转换运算符将其显式转换为-
float f = (float)d;
让我们通过显式转换来重写Example2和Exampe3。
在以下示例中,我们尝试通过使用强制转换运算符显式转换字符值来将整数值分配给字符值-
public class CastingExample { public static void main(String args[]){ int i = 67; char ch = (char)i; System.out.println("Character value of the given integer: "+ch); } }
输出结果
Character value of the given integer: C
在以下示例中,我们尝试通过使用强制转换运算符将其显式转换为浮点变量分配一个双精度值。
public class CastingExample { public static void main(String args[]){ double d = 10021.224d; float f = (float)d; System.out.println("double value: "+f); } }
输出结果
double value: 10021.224