Java语言基础(类型的转换与提升)

一 数据类型的转换
  1.自动类型转换
    i.需要操作数据的类型兼容,如都是都是整型,都是浮点型,或者如整型与字符型
    ii.需要目标类型的范围大于源类型,如byte b = 1; int a = b; 这时的b虽然是byte型,但赋值时自动转换成了int型
  2.强制类型转换
    i.需要操作数据的类型兼容,与自动类型转换一致
    ii.需要目标类型的范围小于源类型,如int a = 128;byte b = (byte) a; 此时的a被语法强制转换成了byte类型然后赋值给了b
    **如果源类型的数据值超出了目标类型的范围,则会出现数据损失,具体的数据损失由二进制方法计算,如一个byte位有8个bit
    而一个int 类型的数据则有32个bit ,如果将int类型强制转换成byte类型则会有32-8=24个bit的数据损失,也就是高位的数据被截断
    转换之后只留下目标类型的bit数位;
3.使用方法进行数据类型转换
   如String.valueOf()
   但其返回值必须与目标类型的数据类型相同;

二 数据类型的提升
  法则如下:
    i. 如果操作数中有一个为double,则计算结果自动提升为double类型;
    ii.如果操作数中没有double,有一个为float,则计算结果自动提升为float类型
    iii.如果操作数中没有float,有一个为long,计算结果提升为long类型
    iv.如果操作数中没有long,有一个为int,则计算结果自动提升为int类型
    v.如果操作数均为short或者byte,则计算结果自动提升为int类型
    特殊:任何数据与String相加,jvm则会认为是数据与String拼接,自动提升为String类型
    若想要拼接的时候进行计算,则需要()来提升优先级

原文地址:https://www.cnblogs.com/Lzzycola/p/13336257.html