美文网首页
JAVA中的类型自动转换规则

JAVA中的类型自动转换规则

作者: dlihasa | 来源:发表于2019-03-05 18:25 被阅读3次

    概述

    自动类型转换也叫隐式类型转换

    • 自动类型转换遵循下面的规则:
      1.若参与运算的数据类型不同,则先转换成同一类型,然后进行运算。
      2.转换按数据长度增加的方向进行,以保证精度不降低。如果一个操作数是long型,计算结果就是long型;如果一个操作数是float型,计算结果就是float型;如果一个操作数是double型,计算结果就是double型。例如int型和long型运算时,先把int量转成long型后再进行运算。
      3.所有的浮点运算都是以双精度进行的,即使仅含float单精度量运算的表达式,也要先转换成double型,再作运算。
      4.char型和short型参与运算时,必须先转换成int型。
      5.在赋值运算中,赋值号两边的数据类型不同时,需要把右边表达式的类型将转换为左边变量的类型。如果右边表达式的数据类型长度比左边长时,将丢失一部分数据,这样会降低精度。

    下图表示了类型自动转换的规则:

    image
    • 数据类型只会自动提升,不能自动降低
      int值可以赋值给long、float、double型变量,不能赋值给byte、short、char型变量

    对于函数的传参也是一样:


    当然,在有函数重载的情况下,java编译器会自动选择最匹配的函数进行调用

    ![ 5.png
    • Java中整数默认的数据类型是int类型
      所有长度低于int的类型(byte、short、char)在运算之后结果将会被提升为int型

    当然还有以下的这种情况,这种情况是因为我们在进行赋值运算的时候,java编译器可以明确知道运算的结果是否超过byte或short的取值范围,所以 byte a = 1 + 1; 并没有报错。而上面 byte c = a + b; 编译出错的原因是因为a和b均为一个变量,相加的结果是否会超过byte的取值范围编译器并不知道,所以编译器将结果提升为int型了。

    结论

    当编译器明确知道整数的运算结果没有到达int的表示范围时,byte、short或char类型的运算结果不会被自动提升为int类型
    当编译器明确知道或不清楚整数的运算结果是否到达int的表示范围时,编译器将会自动将运算的结果转换成int,即使原来是byte、short或char类型。

    引用地址:
    https://blog.csdn.net/qq906627950/article/details/80906837
    https://blog.csdn.net/guanmao4322/article/details/84313776

    相关文章

      网友评论

          本文标题:JAVA中的类型自动转换规则

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