Java 数据类型转换

本文探讨Java中数据类型转换的规则,重点讲解从高到低的强制转换可能导致内存溢出和精度损失,以及运算前后转换时机对结果的影响。实例演示了如何避免这些问题并理解类型转换的策略。

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

Java数据类型转换从低类型转换为高类型,是一种自动类型转换;而反之,则需要加上 『(类型)』来做强制类型转换。

byte  short(2 bytes)  char(2 bytes) --> int (4) --> long (8) --> float (4) --> double (8).

(虽然long是64位,但是小数(float(32位), double)依然处于Java数据类型转换的高处)

注意:

1)做强制类型转换,容易产生两个问题:

a. 内存溢出;

b. 精度丢失;

package superlily.utils;

public class Demo03DataTransform {
    public static void main(String[] args) {

        //1. 从高到低做的是强制类型转换,容易发生内存溢出的情况
        int i = 128;
        byte b = (byte) i; //打开Byte你就能看到byte最大值是127; -128~127; 做了强制类型转换之后溢出了。
        System.out.println(b); // -128

        // 从低往高的数据类型转换是自动的,不需要加(double)
        double d = i;
        System.out.println(d); //128.0

        //2. 强制类型转换时产生的精度丢失情况
        float f1 = 123.89f;
        float f2 = -43.89f;
        System.out.println((int)f1); //123 (小数部分去掉了,数值变小了)
        System.out.println((int)f2); //-43 (小数部分去掉了,数值变大了)
    }
}

2)  运算之后的自动类型转换,注意类型转换是发生在计算之前还是计算之后。

如果类型转换之前已经完成了计算,而计算导致了内存溢出,此时错误已经发生,再转换的结果也是错误的;如果在计算之前做了类型转换,那么结果则不容易出错。下面通过一个例子说明:

int salary = 200_0000_000; //JDK7特性,数据之间可以用下划线分开便于阅读
        int year = 2;
        int result1 = salary * year; //-294967296
        long result2 = salary * year; // -294967296 , 已经运算产生了结果再做的自动类型转换,错误已经发生,已经没用了。
        long result3 = salary * (long)year; //4000000000,运算之前先做强制转换,避免在低类型下产生溢出。
        long result4 = (long)salary * year; //4000000000
        System.out.println(result1);
        System.out.println(result2);
        System.out.println(result3);
        System.out.println(result4);

3) 类型转换的topic请不要带上boolean。也就是说布尔值不参与类型转换的~~~~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值