Java 03 数据类型转换

本文详细介绍了Java中的数据类型转换,包括自动类型转换和强制类型转换。自动转换遵循从低级到高级的原则,如byte、short、char转int,而转换至容量小的类型需要强制转换,可能引发溢出或精度损失。文章还讨论了包装类之间的转换,如To String、Integer、Float、Double等,并提供了相关转换方法的例子和解析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

自动类型转换

  1. 整型、实型(常量)、字符型数据可以混合运算。
    运算中,不同类型的数据先转化为同一类型,然后进行运算。
    转换从低级到高级。
    低 ------------------------------------> 高
    byte,short,char —> int —> long—> float —> double
  2. 数据类型转换必须满足如下规则:
    ・不能对boolean类型进行类型转换。
    ・不能把对象类型转换成不相关类的对象。
    ・在把容量大的类型转换为容量小的类型时必须使用强制类型转换。
    ・转换过程中可能导致溢出或损失精度,例如:
      int i = 128;
      byte b = (byte)i;
     因为 byte 类型是 8 位,最大值为127,所以当 int 强制转换为 byte 类型时,值 128 时候就会导致溢出。
    ・浮点数到整数的转换是通过舍弃小数得到,而不是四舍五入,例如:
      (int)23.7 == 23;
      (int)-45.89f == -45;
  3. 必须满足转换前的数据类型的位数要低于转换后的数据类型。
    例如: short数据类型的位数为16位,就可以自动转换位数为32的int类型,
    同样float数据类型的位数为32,可以自动转换为64位的double类型。
      char c1=‘a’; //定义一个char类型
      int i1 = c1; //char自动类型转换为int
      System.out.println(“char自动类型转换为int后的值等于” + i1); // 97
      char c2 = ‘A’; //定义一个char类型
      int i2 = c2+1; //char 类型和 int 类型计算
      System.out.println(“char类型和int计算后的值等于” + i2); // 66
    解析计算过程:c1 的值为字符 a ,查 ASCII 码表可知对应的 int 类型值为 97,
    A 对应值为 65,所以 i2=65+1=66。


强制类型转换

  1. 条件是转换的数据类型必须是兼容的。
  2. 格式:(type)value type是要强制类型转换后的数据类型。
    实例:
    int i = 123;
    byte b = (byte)i;  // 强制类型转换为byte
    System.out.println("int强制类型转换为byte后的值等于" + b);  // 123
    



包装类转换

  • To String

    int i = 13;
    String s = Integer.toString(i);
    
    float f = 12.34f;
    String s = Float.toString(f);
    
  • To Integer or int

    // 创建 Integer 实例
    Integer i = 128;
    Integer i = new Integer(128);  // Java9以后不推荐
    // 转成 Integer 实例
    Integer i = Integer.valueOf(9);  // f = 9
    Integer i = Integer.valueOf("444",16);  // 使用 16 进制, x = 1092
    // 转成 int 类型
    int i = Integer.parseInt("9");
    int i = Integer.parseInt("444", 16);  // 使用 16 进制, i = 1092
    
  • To Float or float

    // 创建 Float 实例
    Float f = 3.14;
    Float f = new Float(3.14);  // Java9以后不推荐
    Float f = new Float("3.14");  // Java9以后不推荐
    // 转成 Float 实例
    Float f = Float.valueOf(80);  // f = 80.0
    Float f = Float.valueOf("80");  // f = 80.0
    // 转成 Float 类型
    float f = Float.parseFloat("3.14");
    
  • To Double or double

    // 创建 Double 实例
    Double d = new Double("6.35");  // d = 6.35
    // 转成 Double 实例
    Double d = Double.valueOf(5);  // d = 5.0
    // 转成 double 类型
    double d = Double.parseDouble("5");  // d = 5.0
    
  • To BigDecimal

    // 创建 BigDecimal 实例
    BigDecimal b = new BigDecimal("20.15");  // 参数只能用String类型
    BigDecimal b = new BigDecimal(20.15);  // 可以运行,但是会按照double进行计算,丢失精度。比如: 20.15 - 10.10 = 10.04999999999999。
    // 转成 BigDecimal 实例
    BigDecimal b =  BigDecimal.valueOf(20.15);  // int float double 都可以
    
  • To Hex (16进制字符串)

    // Double or double
    String hex = Double.toHexString(20.15);
    
  • 相关资料
    valueOf

一些转换方法

  • String转byte[]
    调用String类的getBytes()方法。
public static byte[] strToByteArray(String str) {
    if (str == null) {
        return null;
    }
    byte[] byteArray = str.getBytes();
    return byteArray;
}
  • byte[]转String
    使用String的构造方法之一。
    方法具体的转换过程较为复杂,其实就是将byte数组的一个或多个元素按指定的Charset类型读取并转换为char类型(char本身就是以Unicode编码方式存储的),因为String类的核心是其内部维护的char数组。
public static String byteArrayToStr(byte[] byteArray) {
    if (byteArray == null) {
        return null;
    }
    String str = new String(byteArray);
    return str;
}
  • byte[]转十六进制String
    所谓十六进制String,就是字符串里面的字符都是十六进制形式,因为一个byte是八位,可以用两个十六进制位来表示,因此,byte数组中的每个元素可以转换为两个十六进制形式的char,所以最终的HexString的长度是byte数组长度的两倍。
public static String byteArrayToHexStr(byte[] byteArray) {
    if (byteArray == null){
        return null;
    }
    char[] hexArray = "0123456789ABCDEF".toCharArray();
    char[] hexChars = new char[byteArray.length * 2];
    for (int j = 0; j < byteArray.length; j++) {
        int v = byteArray[j] & 0xFF;
        hexChars[j * 2] = hexArray[v >>> 4];
        hexChars[j * 2 + 1] = hexArray[v & 0x0F];
    }
    return new String(hexChars);
}
  • 十六进制String转byte[]
    就是byte[]转十六进制String的逆过程
public static byte[] hexStrToByteArray(String str)
{
    if (str == null) {
        return null;
    }
    if (str.length() == 0) {
        return new byte[0];
    }
    byte[] byteArray = new byte[str.length() / 2];
    for (int i = 0; i < byteArray.length; i++){
        String subStr = str.substring(2 * i, 2 * i + 2);
        byteArray[i] = ((byte)Integer.parseInt(subStr, 16));
    }
    return byteArray;
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值