Java数据类型转换(自动转换和强制转换)
Java 有很多种数据类型,比如整形(byte、short、int 和 long)、浮点型(float 和 double)、字符型(char),这些类型之间可以相互转换,主要分为自动转换和强制转换两类。
自动类型转换发生的前提是目标数据类型可以容纳源数据类型的所有值,不会导致数据丢失。这是因为目标数据类型的范围更大,可以表示比源数据类型更大范围的数值。
在自动类型转换中,不需要特别声明,编译器会自动进行处理。这样的特性使得编程更加便捷,不需要显式地进行类型转换。
自动类型转换规则如下。
自动类型转换不仅发生在赋值过程中,在进行数学计算时也会发生自动类型转换,在运算中往往是先将数据类型转换为同一类型,然后再进行计算。
数学计算时的自动类型转换规则如下表所示。
示例如下:
当进行强制类型转换时,需要使用目标数据类型的括号进行声明,以明确指定要进行的转换操作。强制类型转换的场景通常是将范围大的数据类型转换为范围小的数据类型,或者在需要精确控制数据类型的情况下进行转换。
强制类型转换的语法格式:
示例代码如下:
Java自动类型转换
自动类型转换是指在 Java 中,当把一个数据类型的值赋给另一个数据类型的变量时,如果目标数据类型的范围大于源数据类型的范围,Java 会自动执行类型转换,这种转换也称为隐式转换。自动类型转换发生的前提是目标数据类型可以容纳源数据类型的所有值,不会导致数据丢失。这是因为目标数据类型的范围更大,可以表示比源数据类型更大范围的数值。
在自动类型转换中,不需要特别声明,编译器会自动进行处理。这样的特性使得编程更加便捷,不需要显式地进行类型转换。
自动类型转换规则如下。
数字型数据的转换:byte→short→int→long→float→double。
字符型转换为整型:char→int。
自动类型转换不仅发生在赋值过程中,在进行数学计算时也会发生自动类型转换,在运算中往往是先将数据类型转换为同一类型,然后再进行计算。
数学计算时的自动类型转换规则如下表所示。
操作数 1 类型 | 操作数 2 类型 | 转换后的类型 |
---|---|---|
byte、short、char | int | int |
byte、short、char、int | long | long |
byte、short、char、int、long | float | float |
byte、short、char、int、long、float | double | double |
示例如下:
public class Main { public static void main(String[] args) { int num1 = 10; long num2 = num1; // 自动将 int 类型转换为 long 类型 float num3 = 3.14f; double num4 = num3; // 自动将 float 类型转换为 double 类型 char ch = 'A'; int asciiValue = ch; // 自动将 char 类型转换为 int 类型,存储的是'A'的ASCII码值 int num5 = 5; double num6 = 3.14; double result1 = num5 + num6; // 自动将 int 类型 num5 转换为 double 类型后再相加 char ch2 = 'A'; int num7 = 10; int result2 = ch2 * num7; // 自动将 char 类型的 ch2 转换为 int 类型后再相乘 long num8 = 1000L; float num9 = 3.5f; float result3 = num8 + num9; // 自动将 long 类型的 num8 转换为 float 类型后再相加 System.out.println("num2: " + num2); // 输出结果为 10 System.out.println("num4: " + num4); // 输出结果为 3.140000104904175 System.out.println("asciiValue: " + asciiValue); // 输出结果为 65 System.out.println("result1: " + result1); // 输出结果为 8.14 System.out.println("result2: " + result2); // 输出结果为 650 System.out.println("result3: " + result3); // 输出结果为 1003.5 } }代码运行结果如下:
num2: 10
num4: 3.140000104904175
asciiValue: 65
result1: 8.14
result2: 650
result3: 1003.5
Java强制类型转换
强制类型转换是指在 Java 中,将一个数据类型强制转换为另一个数据类型。当进行强制类型转换时,需要使用目标数据类型的括号进行声明,以明确指定要进行的转换操作。强制类型转换的场景通常是将范围大的数据类型转换为范围小的数据类型,或者在需要精确控制数据类型的情况下进行转换。
强制类型转换的语法格式:
(目标类型)value
强制类型转换的注意事项:- 可能造成精度降低或数据溢出;
- 不要对非数值类型进行转换;
- 转换前需要检查数值范围。
示例代码如下:
// 强制类型转换 public class Main { public static void main(String[] args) { int decimalInt = 10; byte byteInt = (byte) decimalInt; // 将 int 类型强制转换为 byte 类型 double float1 = 2.1543276e2; long longInt = (long) float1; // 将 float 类型强制转换为 long 类型 System.out.println(longInt); // 输出 215,小数部分被截掉 float float2 = (float) float1; // 将 double 类型强制转换为 float 类型 long long1 = 999999999999L; int int1 = (int) long1; // ① 将 long 类型强制转换为 int 类型,精度降低 System.out.println(int1); // 输出 -727379969 } }代码运行结果如下:
215
-727379969