• 彻底理解Java中的基本数据类型转换(自动、强制、提升)


    image

    说基本数据类型转换之前,先了解下 Java 中的 8 种基本数据类型,以及它们的占内存的容量大小和表示的范围,如下图所示。

    image

    重新温故了下原始数据类型,现在来解释下它们之间的转换关系。

    自动类型转换

    自动类型转换是指:数字表示范围小的数据类型可以自动转换成范围大的数据类型。

    如:

    long l = 100;
    
    int i = 200;
    long ll = i;

    具体自动转换如如下图所示。

    image

    实线表示自动转换时不会造成数据丢失,虚线则可能会出现数据丢失问题。

    自动转换也要小心数据溢出问题,看下面的例子。

    int count = 100000000;
    int price = 1999;
    long totalPrice = count * price;

    编译没任何问题,但结果却输出的是负数,这是因为两个 int 相乘得到的结果是 int, 相乘的结果超出了 int 的代表范围。这种情况,一般把第一个数据转换成范围大的数据类型再和其他的数据进行运算。

    int count = 100000000;
    int price = 1999;
    long totalPrice = (long) count * price;

    另外,向下转换时可以直接将 int 常量字面量赋值给 byte、short、char 等数据类型,而不需要强制转换,只要该常量值不超过该类型的表示范围都能自动转换。

    强制类型转换

    强制类型转换我们再清楚不过了,即强制显示的把一个数据类型转换为另外一种数据类型。

    如:

    short s = 199;
    int i = s;// 199
    
    double d = 10.24;
    long ll = (long) d;// 10

    以上的转换结果都在我们的预期之内,属于正常的转换和丢失精度的情况,下面的例子就一样属于数据溢出的情况。

    int ii = 300;
    byte b = (byte)ii;

    300 已经超出了 byte 类型表示的范围,所以会转换成一个毫无意义的数字。

    类型提升

    所谓类型提升就是指在多种不同数据类型的表达式中,类型会自动向范围表示大的值的数据类型提升。

    把上面的溢出的例子再改下。

    long count = 100000000;
    int price = 1999;
    long totalPrice = price * count;

    price 为 int 型,count 为 long 型,运算结果为 long 型,运算结果正常,没有出现溢出的情况。

    推荐:Spring Boot & Cloud 最强技术教程

    扫描关注我们的微信公众号,干货每天更新。

    image

  • 相关阅读:
    加分二叉树
    飞扬的小鸟
    洛谷P2066 机器分配
    解方程
    洛谷P1781 宇宙总统
    洛谷P1311 选择客栈
    洛谷P1081 开车旅行70分
    CSS清除浮动
    常见的内联元素与块状元素
    标签的权值问题(优先级)
  • 原文地址:https://www.cnblogs.com/java-stack/p/11952454.html
Copyright © 2020-2023  润新知