黑马程序员技术交流社区

标题: 新人问题 [打印本页]

作者: 宋洪祥    时间: 2012-3-7 14:48
标题: 新人问题
1       char  a;
2       a=a+10;
3       a+=10;

2跟3表示的意义不是相同的吗?为什么2提示有错误那?
作者: 泮和顺    时间: 2012-3-7 15:00
3有自动类型转换 他是可以的
2是类型不匹配a+10
作者: 赵孟恩    时间: 2012-3-7 15:00
2跟3都有错误的,a没有初始化怎么能直调用呢
作者: 王思兰    时间: 2012-3-7 15:02
第二个是两者类型不同,a是char类型,10是int类型,
第三个“+=”符号有自动强制转换类型的功能
作者: 施俊    时间: 2012-3-7 15:07
类型不同,
int a=0;
a=a+10;
a+=10;
这样写下面两个得出结果相同。
如果定义a为char型
第二个不能做运算,因为10是int型。
第三个赋值运算符可以强制转换,所以可以。

作者: 杨毅    时间: 2012-3-7 15:07
首先char a; 这个要初始化,char a = 'a';
第二句,a = a +10; 左边编译器认为需要的是char类型,右边执行a+10会进行类型提升成为int型,这样编译器就会报错;
第三句, += 是java语言规定的运算符,编译器会自己处理,所以正确。

作者: 黄或俊    时间: 2012-3-7 15:16
2、3表示的意义不一样
a=a+10; 这个是两次运算,先加后赋值,加法运算的时候因为Int类型占4个8位,char类型会自动提升为4个8位,最后得出的结果是Int类型的不能赋值给char
a+=10;   这个是一次运算,直接将a+10的和赋值给a,JAVA中有自动类型转换
作者: 秦超    时间: 2012-3-7 15:18
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相加!!
原来应该是这样,有说的不对的,希望高人指正~!


作者: 黄或俊    时间: 2012-3-7 15:22
赵孟恩 发表于 2012-3-7 15:00
2跟3都有错误的,a没有初始化怎么能直调用呢

还这位仁兄想的周道,没有初始化A




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2