您的位置:首页 > 职场人生

黑马程序员--02.Java语言基础--01.赋值语句练习2【个人总结】

2013-07-16 19:24 621 查看

Java赋值语句举例练习2

----------- android培训java培训、java学习型技术博客、期待与您交流! ------------

1. 基本数据类型题目

(1). 下列两个赋值语句正确么?为什么?

short s =4;      //line1

       s=s+5;    //line2

ANS: 以上语句编译失败

* line1编译没有问题。原因已经介绍过了,变量初始化的时候,对于整型变量,只要右边的整型常量在左边整型变量表示的范围内就好,两边的数据类型可以不一致。

但是对于浮点型变量的初始化,由于小数点的位置不确定,所以只要把double类型的浮点型常量赋值给float类型的变量,就会编译出错。

*line2会导致编译失败。这个过程不能和变量初始化一样来考虑问题

原因就是:s+5  其中s是short类型的 5默认是int类型的 所以两者做运算  结果会自动提升到int类型的。int向short类型转换(非初始化过程),是一种高类型向低类型做转换,形式可能损失精度!!所以编译会出错。

(2). 这两个赋值语句正确么?为什么?

short s =4;

       s+= 5;

ANS:以上语句编译成功!

(3). Java中s+=5; 和s =s+5;有什么区别?

在Java中,两者的区别就是:

       复合赋值运算符:会帮助运算类型右边的被提升运算结果做自动类型转换。保证编译通过

       单独赋值运算符:仅仅做结果的数据类型提升,而不会根据两边的类型不一致而做自动类型转换。因此,如果两边类型不一致,并且是高类型向低类型赋值,必然会编译失败。

(4). 总结

遇见这种赋值运算的时候,先分成以下两种情况来考虑:

[1]. 当赋值是变量的初始化的时候:大原则就是实际考虑赋值过程中精度是否损失

       *整型变量初始化:只要两边都是整型,并且右边的整型常量大小可以被左边的整型变量存储范围所容纳,这个赋值过程实际上就不会损失精度。编译正确。

e.g. short s=30000; //编译正确

   byte b =128;// 编译错误

       *浮点变量初始化:由于小数点的位置不确定,所以,只要是右边的double类型的常量赋值给左边的float类型的变量,实际的赋值过程可能会出现精度损失,编译出错。

e.g. float f=54.65;//编译错误。右边默认double类型。

[2]. 当赋值不是变量初始化的时候:分成单独赋值运算符合赋值运算

       *单独赋值运算:右边的计算结果会自动进行类型提升,一旦左边的类型比右边的类型低,这种赋值就会出现编译失败

       e.g.short s =0;

s = s+4; //4为int s为short  两者相加类型提升为int  int向short转换  精度损失 

//编译失败

       *复合赋值运算:再计算结果被自动提升的基础之上,自动帮助进行类型转换,相当于一次手动强制类型转换保证编译通过,这种赋值会编译成功

       e.g.short s =0;

              s+=4; //虽然求和的运算结果是int类型,但是+=帮助做了自动类型转换,所以便以

//正确。相当于 s =(short) s+4;

 

----------- android培训java培训、java学习型技术博客、期待与您交流! ------------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐