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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黑马-王泽斌 初级黑马   /  2012-8-10 16:13  /  1614 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

以下列变量赋值语句正确的是:
A、byte b = 1;  b = b +1;
B、byte b = 1;  b = 1 + 1;
C、byte b = 1;  b = b++;
D、byte b = 1;  b += 1;
其中的B选项,1+1,1是int类型,该不该强制类型转换,为什么?
而C、D选项是不是自动类型转换了?

5 个回复

倒序浏览
B项 不用强制转换,因为不涉及到变量的运算,相当于直接赋值b=2;
C、D项也不会自动转型,因为b++ 和b+= 1 都不算是一次运算
回复 使用道具 举报
在sum是int、long、float、double类型的情况下。sum += i;和sum = sum + i;运行的结果都一样的,都是同一个意思。sum+=i就是sum = sum + i的另一种简写方式,相应的加减乘除都有。
比如除法:sum %= i;和sum = sum % i;
但如果sum是short、byte、char类型的话,那就有区别了,因为这里有个向上转型和向下转型的说法:
sum=sum+i          编译失败,与i相加时sum会被提升为int类型,运算后的结果还是int类型。无法赋值给short、char、byte类型。因为int类型不能向下转型。
sum+=i                编译通过,因为+=运算符具有自动强转功能。相当于多做了这样一件事情,假如sum现在是short类型:sum = (short)(sum+i)
---------------------------------------------------------------------------
所以,从上面的话可以看出,A错;D正确。
B、C正确,没有涉及到运算,不会有强制转换操作;

评分

参与人数 1黑马币 +2 收起 理由
黑马-王泽斌 + 2 赞一个!

查看全部评分

回复 使用道具 举报
本帖最后由 纪艺松 于 2012-8-10 16:49 编辑

D、byte b = 1;  b += 1;     属于复合赋值操作。(复合赋值操作符包括 +=、-=、*=、/=、%=、<<=、>>=、>>>=、&=、^=和|=)
                          复合赋值表达式自动地将它们所执行的计算的结果转型为其左侧变量的类型。如果结果的类型与该变量的类型相同,
、那么这个转型不会造成任何影响。然而,如果结果的类型比该变量的类型要宽,那么复合赋值操作符将悄悄地执行一个窄化原始类型转换。

其他的都会把一个int赋值给一个byte应该会报错吧,,应该是D对


回复 使用道具 举报
其中的B选项,1+1,1是int类型,该不该强制类型转换,为什么?
答:b=1+1相当于b=2,这里byte能够容下2,会发生隐式类型转换不用强制类型转换
这里要强调一下,隐式类型转换一般都是放宽转换(如byte到int)
但有一个例外,在赋值转换中,隐性转换也包含了缩窄基本转换(从int到byte),但是记住一定实在赋值转换中,如byte b=1,是可以的,但是int a=1,byte i=a就不行,必须要强制类型转换
而C、D选项是不是自动类型转换了?
答:C是,D是强制转换,+=操作符默认有强转换功能
回复 使用道具 举报
问题已经解决
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马