天天看点

Java数据类型自动转换(++ ,+=)

Java数据类型自动转换(++ ,+=)

在算术表达式中的自动类型转换

  • 数据从类型范围小的自动向数据范围大的转换
  • 整数向浮点数转换(包括long类型向float转换)
    • 例子:
      Java数据类型自动转换(++ ,+=)
  • char类型的范围内与整数之间转换依据ASCII表
强制转换会丢失精度,尤其是超过数据范围和整数与浮点数的转换

在赋值表达式中的自动类型转换

  • 先看两个例子
    Java数据类型自动转换(++ ,+=)
Java数据类型自动转换(++ ,+=)
- 这里的m+2L就是上面的自动类型转换,在执行加法时就成了long类型,所以是long类型的2147483649(已经超出了int的范围)
- num+1也是自动类型转换,在执行加法时就成了int类型,所以是int类型的128(已经超出了byte的范围)
           
  • 再来看++的情况
    Java数据类型自动转换(++ ,+=)
    • 这里没有发生自动类型转换吗,是有的,而且还有强制类型转换。如果只是

      num = num + 1

      是会产生编译错误的,所以这里还有默认的强制类型转换

      num = (byte) (num+1)

      ,所以结果被截取为byte类型,变成了-128。
  • +=情况类似
    Java数据类型自动转换(++ ,+=)
    • m+=2L

      可以看做

      m=(int)(m+2L)

      ,强制类型转换为int,变成-2147483647