数据类型之间的强制性转换
在 Java 中,数据类型之间的转换主要分为两种:自动类型转换(也称为隐式类型转换)和强制类型转换(也称为显式类型转换)。自动类型转换通常发生在更宽泛的数据类型向更狭窄的数据类型转换时,而强制类型转换则需要程序员显式地进行。
自动类型转换(隐式类型转换)
自动类型转换发生在基本数据类型之间,从较小范围的类型自动转换为较大范围的类型。例如:
- 从
byte
或short
转换为int
或long
。 - 从
int
转换为long
或float
或double
。 - 从
float
转换为double
。
这些转换不需要程序员显式地进行,Java 编译器会自动处理。
强制类型转换(显式类型转换)
当需要将一个数据类型转换为一个更狭窄的数据类型时,需要使用强制类型转换。这种转换可能会丢失精度或引发异常,因此需要程序员显式地进行。常见的强制类型转换包括:
-
从
long
转换为int
:long a = 12345678901234L; int b = (int) a; // 强制类型转换
-
从
double
转换为int
:double a = 123.456; int b = (int) a; // 强制类型转换,只取整数部分
-
从
float
转换为byte
:float a = 123.456f; byte b = (byte) a; // 强制类型转换,只取整数部分
-
从
char
转换为int
:char a = 'A'; int b = (int) a; // 强制类型转换,将字符转换为其 ASCII 码值
-
从
int
转换为char
:int a = 65; char b = (char) a; // 强制类型转换,将 ASCII 码值转换为字符
注意事项
- 精度丢失:在从浮点数转换为整数时,小数部分会被截断。
- 溢出:在将较大的数值转换为较小的数据类型时,可能会发生溢出。例如,将
long
转换为int
时,如果数值超出int
的范围,结果将是不确定的。 - 异常:在某些转换中,如将
double
转换为int
,如果数值太大或太小,可能会抛出java.lang.NumberFormatException
。
示例代码
public class TypeCasting {
public static void main(String[] args) {
long a = 12345678901234L;
int b = (int) a; // 强制类型转换,可能会丢失精度
double c = 123.456;
int d = (int) c; // 强制类型转换,只取整数部分
float e = 123.456f;
byte f = (byte) e; // 强制类型转换,只取整数部分
char g = 'A';
int h = (int) g; // 强制类型转换,将字符转换为其 ASCII 码值
int i = 65;
char j = (char) i; // 强制类型转换,将 ASCII 码值转换为字符
System.out.println("b = " + b);
System.out.println("d = " + d);
System.out.println("f = " + f);
System.out.println("h = " + h);
System.out.println("j = " + j);
}
}
在实际编程中,合理地使用数据类型转换可以提高代码的灵活性和效率,但也要注意避免潜在的问题。
标签:类型转换,转换,int,数据类型,强制性,char,强制 From: https://www.cnblogs.com/wjw2003512/p/18338348