A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© SpiderManZZH 中级黑马   /  2014-12-12 14:53  /  1553 人查看  /  13 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

看到一个类型提升的语言基础题目,要求判断下列哪个等式是正确的,并作出分析
a. byte b = 1 + 1;     
b. byte b = 1; b = b + 1;
c. byte b = 1; b = b += 1;   
d. byte b = 1; b = ++b;

评分

参与人数 1技术分 +1 收起 理由
杨佳名 + 1

查看全部评分

13 个回复

倒序浏览
A,正确,1+1=2,然后将2赋值给byte类型,没问题。
B,错误,b=b+1,右侧类型提升为int,int赋值给byte,错误。
C,正确,b=b+=1,相当于b+=1;b=b;,+=号特殊运算符,java自动处理,两侧类型相同,相当于将2赋值给b。然后将b赋值给b。更没问题。
D,正确,b = ++b;右侧b做+1运算,然后将结果赋给b,仍然是byte赋值给byte没有错误。

评分

参与人数 1技术分 +1 收起 理由
杨佳名 + 1

查看全部评分

回复 使用道具 举报

回帖奖励 +1

本帖最后由 杨佳名 于 2014-12-12 16:18 编辑

为了这个黑马币...
  1. /**
  2. * 第1题: 以下代码哪个是正确的?为什么?
  3. *
  4. *                 a. byte b = 1 + 1;
  5. *                 b. byte b = 1; b = b + 1;
  6. *                 c. byte b = 1; b = b += 1;
  7. *                 d. byte b = 1; b = ++b;
  8. *
  9. * 解题分析:
  10. *                 选项a:正确。
  11. *                                 定义了一个byte类型的变量b,值为2。
  12. *                 选项b:错误。
  13. *                         分析:
  14. *                                 编译无法通过。在进行b+1操作时编译器会自动检测到byte类型与int类型,这时会自动向上转型,结果变成int类型。
  15. *                                  而试图将int类型数据赋值给byte类型必然会造成精度损失,所以编译失败。
  16. *                                  改正后的结果应该是:                byte b = 1; b = (byte)(b + 1);
  17. *                 选项c:正确。
  18. *                         分析:
  19. *                                 与选项b不同,这里编译运行都正确相当于b+=1;b=b;(引自沙发)
  20. *                 选项d:正确。
  21. *                         分析:
  22. *                                 将选项中的语句拆分为:        byte b = 1;                ++b;        b=b;
  23. *                                 而 ++b; 等效于 b += 1;
  24. *                                 通过分析c,原因也就自然清楚了。
  25. *
  26. *
  27. * @author 杨佳名
  28. *
  29. */
复制代码

点评

刚开始弄错了...  发表于 2014-12-12 16:18
回复 使用道具 举报
仅供参考。也是我觉得写代码一种不错的书写格式
回复 使用道具 举报
b是一定正确的,其他不太确定
会把原为byte类型的b提升为int类型吧
这题是多选么
回复 使用道具 举报
        byte a = 1 + 1;     //自动将2转换为byte型赋值给a,right
        byte b = 1; b = b + 1;//b被提升成int型后与1相加,int型不能直接赋值给byte数据,error
        byte c = 1;  c += 1;   //+=会自动将右边的转换为byte后与左边进行加法运算,right
        byte d = 1; d = ++d;    //自增运算无任何类型转换,right
回复 使用道具 举报
史云龙 发表于 2014-12-12 15:06
A,正确,1+1=2,然后将2赋值给byte类型,没问题。
B,错误,b=b+1,右侧类型提升为int,int赋值给byte,错 ...

哥们,你看2楼的回复在c和d选择上,最后b的类型是  int类型还是 byte类型,结论不一样啊?
回复 使用道具 举报
杨佳名 发表于 2014-12-12 15:11
为了这个黑马币...

哥们,你看1楼的回复在c和d选择上,最后b的类型是  int类型还是 byte类型,结论不一样啊!有什么好办法证明一下呢?
回复 使用道具 举报
陈国华 发表于 2014-12-12 15:15
b是一定正确的,其他不太确定
会把原为byte类型的b提升为int类型吧
这题是多选么

哥们 视频看了多少啊?你瓶子是漏的吗
回复 使用道具 举报
c和d 选项运算后最后的b变成那种类型了。
回复 使用道具 举报
SpiderManZZH 发表于 2014-12-12 15:39
哥们 视频看了多少啊?你瓶子是漏的吗

:lol你的题目有歧义
我理解为选择哪个是类型提升的选项:lol
回复 使用道具 举报
本帖最后由 史云龙 于 2014-12-12 16:04 编辑
SpiderManZZH 发表于 2014-12-12 15:36
哥们,你看2楼的回复在c和d选择上,最后b的类型是  int类型还是 byte类型,结论不一样啊? ...

b+=1,我的理解是等效于b= (byte) (b+1);.可以算是将b类型提升了吧。。也可以理解成左右两侧类型相同。

评分

参与人数 1黑马币 +3 收起 理由
杨佳名 + 3

查看全部评分

回复 使用道具 举报
本帖最后由 杨佳名 于 2014-12-12 16:30 编辑
SpiderManZZH 发表于 2014-12-12 15:36
哥们,你看2楼的回复在c和d选择上,最后b的类型是  int类型还是 byte类型,结论不一样啊? ...

是byte。++、+=时首先会将运算符右边的数据类型强制转化为与运算符左边相同的类型,并且最后结果与运算符左边的保持一致
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马