1. 基本类型转换
1.1 默认转换(隐式转换)
小类型自动转换为大类型,无需手动操作,不会丢失数据。
- 1.1.1 转换方向:
byte→short→int→long→float→double - 1.1.2 示例:
int num = 12346794;
long l = num; // int 自动转为 long
byte by = 123;
int type = by; // byte 自动转为 int1.2 强制类型转换(显式转换)
大类型转换为小类型,需手动操作,可能造成数据丢失。
- 1.2.1 格式:
目标类型 变量名 = (目标类型)(被转换的数据); - 1.2.2 示例:
float fl = 2200000000F;
int num = (int) fl; // 精度丢失
int num1 = 100000;
short sh = (short) num1; // 数据溢出丢失
byte b = (byte) 200; // 超出 byte 范围,结果异常1.3 byte / short 运算的特殊规则
- 1.3.1 自动提升:多个
byte或short进行计算时,结果默认提升为int类型,直接赋回byte/short需强制转换 - 1.3.2 示例:
byte b1 = 3, b2 = 4, b;
b = (byte)(b1 + b2); // 必须强制转换
// b = b1 + 100; // 报错:结果为 int,不能直接赋给 byte- 1.3.3 字面量例外:
b = 3 + 4;编译器在编译期直接计算为7,确认在范围内则不报错
1.4 char 与 int 的运算
- 1.4.1 规则:
char + int结果为int类型,char会自动转为其对应的 ASCII 码参与运算 - 1.4.2 常用 ASCII 对照(与 Demo30 一致):
'a'= 97,'A'= 65,'0'= 48 - 1.4.3 示例:
System.out.println('a'); // 输出:a
System.out.println('a' + 1); // 输出:98(97 + 1)2. 示例代码
package com.itszt;
// 基本类型转换
public class Demo50 {
public static void main(String[] args) {
// 默认转换:小 --> 大
int num = 12346794;
long l = num;
System.out.println("l = " + l);
byte by = 123;
int type = by;
System.out.println("type = " + type);
// 强制转换:大 --> 小,格式:目标类型 变量名 = (目标类型)(被转换的数据);
float fl = 2200000000F;
num = (int) fl;
System.out.println("num = " + num);
int num1 = 100000;
short sh = (short) num1;
System.out.println("sh = " + sh);
byte b = (byte) 200;
System.out.println("b = " + b);
// byte/short 运算结果默认为 int
byte b1 = 3, b2 = 4, b2result;
b2result = (byte)(b1 + b2);
// char + int = int,char 转为 ASCII 参与运算
System.out.println('a'); // a
System.out.println('a' + 1); // 98
}
}3. 总结
| 转换类型 | 方向 | 是否丢失数据 | 是否需要手动操作 |
|---|---|---|---|
| 默认转换 | 小 → 大 | 否 | 否 |
| 强制转换 | 大 → 小 | 可能 | 是,加 (目标类型) |
| byte/short 运算 | 结果提升为 int | 强转后可能 | 赋回需强制转换 |
| char 运算 | char → int | 否 | 自动转 ASCII |