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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 宋洪祥 中级黑马   /  2012-3-7 14:48  /  2753 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

1       char  a;
2       a=a+10;
3       a+=10;

2跟3表示的意义不是相同的吗?为什么2提示有错误那?

8 个回复

正序浏览
赵孟恩 发表于 2012-3-7 15:00
2跟3都有错误的,a没有初始化怎么能直调用呢

还这位仁兄想的周道,没有初始化A
回复 使用道具 举报
杨毅 黑马帝 2012-3-7 15:07:54
8#
首先char a; 这个要初始化,char a = 'a';
第二句,a = a +10; 左边编译器认为需要的是char类型,右边执行a+10会进行类型提升成为int型,这样编译器就会报错;
第三句, += 是java语言规定的运算符,编译器会自己处理,所以正确。
回复 使用道具 举报
类型不同,
int a=0;
a=a+10;
a+=10;
这样写下面两个得出结果相同。
如果定义a为char型
第二个不能做运算,因为10是int型。
第三个赋值运算符可以强制转换,所以可以。
回复 使用道具 举报
第二个是两者类型不同,a是char类型,10是int类型,
第三个“+=”符号有自动强制转换类型的功能
回复 使用道具 举报
2跟3都有错误的,a没有初始化怎么能直调用呢
回复 使用道具 举报
3有自动类型转换 他是可以的
2是类型不匹配a+10
回复 使用道具 举报
2、3表示的意义不一样
a=a+10; 这个是两次运算,先加后赋值,加法运算的时候因为Int类型占4个8位,char类型会自动提升为4个8位,最后得出的结果是Int类型的不能赋值给char
a+=10;   这个是一次运算,直接将a+10的和赋值给a,JAVA中有自动类型转换
回复 使用道具 举报
char 的等级没有int 的高(通俗解释,也就是开辟的内存空间没有int的大)
所以当char类型的a 与 int 类型的 10相加时,a会自动提升为int型,所以2.的右边实际上是int型,但是等号左边却是char型,等级高的不能自动转换成等级低的,所以2会出错
也就是 (char)a = (char)a + (int)10 ; 右边的结果是int ,左边的变量是char

关于3.的运行原理好像是,想把a的值转换成ascii值,然后和10相加,所以不会报错  ,  a对应的ascii值是97,所以可以和10相加!!
原来应该是这样,有说的不对的,希望高人指正~!

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马