黑马程序员_java学习第二课中的赋值运算符疑惑总结

来源:互联网 发布:java程序员笔试题 编辑:程序博客网 时间:2024/05/22 01:41

------- android培训、java培训、期待与您交流! ----------


今天在复习课程的时候,发现了一些不明白的地方:

class Demo

{

public static void main(String[] args)

{

byte b=33;

float  f=33.3f;

f+=11.1;

System.out.print(f);

}

}

系统默认的整数类型是int类型   系统默认的小数类型是double类型

float f=33.3f ; 这是赋值动作..

f+=11.1 ;这句话我在学习中,理解的是11.1是double类型  赋值运算符把最后的结果自动强转成了float类型并赋值给f;

疑惑点:

既然赋值运算符确实做了自动强制转换动作,就可以理解 byte b=33为什么会通过了...

可以理解赋值运算符在赋值的时候,先自动把int类型的数据转成了byte数据...

但float f=33.3,这样又不对了 ,赋值运算符并没有把double类型的数据自动强转成float数据...

个人总结:

经过网上的查找,和朋友的讨论,*=这种赋值运算符比较特殊,确实做到了自动强制转换并赋值的动作...

对于为什么byte b=33可以,而float f=33.3不可以..

byte b=33 ; 33虽然是int类型,但是编译器会预判该数据是否在byte的取值范围内,在不丢失任何数据的情况下,给予转换..

float f=33.3;33.3是double类型,精度比float要高,编译器预判该数据放在float中会损失精度,在要丢失数据的情况下,不会给予转换..


最后,个人和朋友认为:直接赋值是 温柔的转换,会在不丢失数据的情况下才给予转换..

而*=这种赋值是 野蛮的转换,它不管你丢不丢失数据,就强制的转换了..



对于相同的两个类型做运算:

验证代码:


通过以上的代码验证 :相同的byte类型数据做运算会自动提升到int类型, 不光byte,在short类型, char类型做运算的时候,也会自动提升到int类型做运算..

而小数类型中float类型,相同的float类型在最运算的时候并没有提升..




对于不相同的两个类型做运算:

验证代码:


对于不同类型的数据之间是不能做运算的,但对于整数,字符可以做运算,得有一个操作为前提:自动类型提升..

原则:以大的为主,小的向大的提升...