java自动类型转换

java自动类型转换

java转型范围,自动转型和强制转型

1.自动类型转换

  • 也称隐式类型转换,是指不需要书写代码,由系统自动完成的类型转换。由于实际开发中这样的类型转换很多,所以 Java 语言在设计时,没有为该操作设计语法,而是由 JVM 自动完成。

  • 转换规则:从存储范围小的类型到存储范围大的类型。

    具体规则为:byte→short(char)→int→long→float→double

    注意问题:在整数之间进行类型转换时,数值不发生改变,而将整数类型,特别是==比较大的整数类型转换成小数类型时,由于存储方式不同,有可能存在数据精度的损失==。

  • 窄化(向下转型)和宽化转换

    基本类型转型(除boolean,这个不能接受任何转型动作) 只要是宽化转换,就不需要明确指示。因为新型别能容纳来自是旧型别的信息,而不会遗失任何信息。只要有窄化转换时,编译器才会要求你强制转型

    short s = 2;
    不会丢失精度,所以不提示失败,如果
    short s = 222222;
    就会提示失败,需要你进行强制转型;因为short的最大的数值是32767
    
    1float f=3.4;是否正确? 
    答:不正确。3.4是双精度数,将双精度型(double)赋值给浮点型(float)属于下转型(down-casting,也称为窄化)会造成精度损失,因此需要强制类型转换float f =(float)3.4; 或者写成float f =3.4F .
    
    注:由上面想到: byteshortintlong 在初始化的时候给予整数,如long l = 3; byte b = 3; 虽然3默认是int类型的,但是这样是正确的。 这里需要在双精度数字后面加字母的只有float这一例了
    
    2short s1 = 1; s1 = s1 +1;有错吗?short s1 = 1; s1 += 1;有错吗? 
    答:short s1 = 1; s1 = s1 + 1是错的,s1 + 1在运算过程中1int类型,s1是short类型,向高的转,结果为int类型,所以这里需要强转,而 s1 += 1是正确的,因为jvm自动帮我们处理好了
    
    注:short s1 = 1 + 2 + 3;是正确的。当然除了shortshort低的byte也有同样的问题

2.强制类型转换

  • 也称显式类型转换,是指必须书写代码才能完成的类型转换。该类类型转换很可能存在精度的损失,所以必须书写相应的代码,并且能够忍受该种损失时才进行该类型的转换。

    转换规则:从存储范围大的类型到存储范围小的类型。

    具体规则为:double→float→long→int→short(char)→byte

    语法格式为:(转换到的类型)需要转换的值

猜你喜欢

转载自blog.csdn.net/weixin_40304387/article/details/79672510