1. 基本类型转换

1.1 默认转换(隐式转换)

小类型自动转换为大类型,无需手动操作,不会丢失数据

  • 1.1.1 转换方向byteshortintlongfloatdouble
  • 1.1.2 示例
  int num = 12346794;
  long l = num;  // int 自动转为 long
  
  byte by = 123;
  int type = by;  // byte 自动转为 int

1.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 自动提升:多个 byteshort 进行计算时,结果默认提升为 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