Java中的缩窄是什么?请解释。
Java提供各种数据类型来存储各种数据值。它提供了如下所示的7种基本数据类型(存储单个值):
- boolean − 存储表示真或假的1位值。
- byte − 存储最多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
在下面的示例中,我们尝试将双精度值赋值给浮点型变量。
示例
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和Example3。
在下面的示例中,我们尝试通过使用强制类型转换运算符显式转换将整数值赋值给字符变量:
示例
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
广告