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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 深圳在漂移 中级黑马   /  2013-7-19 13:42  /  12650 人查看  /  22 人回复  /   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;  

  我知道:第一个是对的,定义b为byte型,且值为2;第二个是b+1为byte加int类型结果为int类型,把int类型赋值给byte类型的b会产生编译错误,精度丢失; 但是第三个和第四个是为什么呢?

评分

参与人数 1技术分 +1 收起 理由
万琪 + 1

查看全部评分

22 个回复

倒序浏览
a,c,d正确;
选项b中,b+1的结果默认转换为int型,int型不能直接转换为byte型,需强制转换。应改为:byte b=1;b=(byte)(b+1);
选项c中,b+=1包含了一个隐藏的类型转换,相当于 b=(byte)(b+1);
选项d中,b=++b也包含了一个隐藏的类型转换

评分

参与人数 1技术分 +1 收起 理由
万琪 + 1 很给力!

查看全部评分

回复 使用道具 举报 2 0
我举个视频里的例子哈
short s = 3;

s=s+2;

s+=2;
有什么区别?

s=s+2编译失败。这是两次运算,s被提升为int型,运算结果为int型,无法赋给short类型;

s+=2编译通过,这是一次运算,+=运算符在给s赋值时,自动完成了强制转换操作。

评分

参与人数 1技术分 +1 收起 理由
万琪 + 1 很给力!

查看全部评分

回复 使用道具 举报
2楼 正解
回复 使用道具 举报
这是隐式转换和强制转换的问题。
回复 使用道具 举报
xscn 发表于 2013-7-19 13:57
我举个视频里的例子哈
short s = 3;
s=s+2;

那么我里面的a,b,c,d哪个对,哪个不对呢?具体原因是?
回复 使用道具 举报
tonygone 发表于 2013-7-19 13:45
a,c,d正确;
选项b中,b+1的结果默认转换为int型,int型不能直接转换为byte型,需强制转换。应改为:byte ...

讲得很详细,谢谢~
回复 使用道具 举报
xscn 高级黑马 2013-7-19 16:07:50
8#
本帖最后由 xscn 于 2013-7-19 16:09 编辑
深圳在漂移 发表于 2013-7-19 15:25
那么我里面的a,b,c,d哪个对,哪个不对呢?具体原因是?

你的abcd,ab你不是知道原因了吗??
我举的例子就是为了说明你的b,c的区别
你例子里cd都是一次运算,包含了一个隐性的数据强制转换
回复 使用道具 举报
xscn 发表于 2013-7-19 16:07
你的abcd,ab你不是知道原因了吗??
我举的例子就是为了说明你的b,c的区别
你例子里cd都是一次运算,包 ...

明白了,谢啦!
回复 使用道具 举报
为什么我感觉第一个也是错的啊
回复 使用道具 举报
为什么我感觉第一个也是错的啊
回复 使用道具 举报
迷迷糊糊的进来迷迷糊糊的懂了然后迷迷糊糊的走人
回复 使用道具 举报
王会涛 发表于 2014-12-11 19:51
为什么我感觉第一个也是错的啊

第一个1+1是显式的赋值 并且值在byte的范围内
回复 使用道具 举报
xscn 发表于 2013-7-19 13:57
我举个视频里的例子哈
short s = 3;
s=s+2;

大神 这个隐式转换是怎么来的? 是++的运算自己的特性吗?
回复 使用道具 举报
tonygone 发表于 2013-7-19 13:45
a,c,d正确;
选项b中,b+1的结果默认转换为int型,int型不能直接转换为byte型,需强制转换。应改为:byte ...

讲的好。都忘了。
回复 使用道具 举报
不错,谢谢楼主的提问
回复 使用道具 举报
这个终于明白点了
回复 使用道具 举报
要说二次运算的话会类型转换,a选项中1+1两个都是Int型,结果2也应该是int型才对,那它就不能赋给byte型的变量b才对,我哪想错了吗?
回复 使用道具 举报
{:2_30:赞一个!
回复 使用道具 举报
a 为什么是对的呢? 不是默认int类型吗?  难道也是隐藏包含强制转换?
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马