Java 中的窄化是什么?解释一下。
java 8object oriented programmingprogramming更新于 2025/9/6 0:44:17
Java 提供了各种数据类型来存储各种数据值。它提供了 7 种原始数据类型(存储单个值),如下所示:−
- boolean − 存储 1 位值,表示 true 或 false。
- 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;
让我们通过显式转换重写示例2和示例3。
在下面的示例中,我们尝试通过使用强制类型转换运算符显式转换将整数值赋值给字符值。 −
示例
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

