美文网首页我的 Java 进化史
第六课 基本数据类型之间的转换

第六课 基本数据类型之间的转换

作者: Yorick_Xu | 来源:发表于2020-05-18 20:35 被阅读0次

    1 自动类型转换

    1.1 什么是自动类型转换

    • 容量小的数据类型可以自动转换为容量大的数据类型

    注:容量的意思是该基本数据类型的表示范围的大小(参照第五课的基本数据类型表示范围)

    1.2 基本类型之间的自动类型转换

    基本数据类型自动转化图
    • 图中,黑色实线表示无数据丢失的自动类型转换;红色虚线表示可能存在精度损失的类型转换。
    • 特例:可以将整型常量直接赋值给byteshortchar等类型变量,而不需要进行强制类型转换,只要不超过表示范围。

    2 强制类型转换

    • 基本语法
    byte a = 100;
    int b = (int)a;
    
    • 当将一种类型强制转换成另一种类型,而又超出了目标类型的表示范围,就会被截断成为一个完全不同的值。
    int x = 300;
    byte bx = (byte)x; // 此时,bx的值需要根据内存进行分析,而不是300
    

    3 运算时类型提升

    • 做所有的二元运算过程中,都伴随着类型提升问题
    • 运算过程中的类型提升,需要先进行类型的转换后再进行运算

    测试代码如下:

    int a = 1000000000;
    int b = 20;
    
    System.out.println((long)a * b); // 此时a提升为long类型,整个表达式就提升了
    System.out.println((long)(a * b)); // 此时a*b的整体被提升到long型
    

    运行结果如下:

    20000000000
    -1474836480
    

    注:当出现以下情况时,最好在表达式开始之初就将类型进行提升(如long_1所示),而不是在结尾处进行类型提升(如long_2所示),防止前半部分计算时已经发生溢出的现象

    long_1 = 70L * 60 * 24 * 365;
    long_2 = 70 * 60 * 24 * 365L;
    

    相关文章

      网友评论

        本文标题:第六课 基本数据类型之间的转换

        本文链接:https://www.haomeiwen.com/subject/unksohtx.html