x=x+1与x+=1的问题
short x = 5;
x+=11;
System.out.println(x);
上面的代码对!
short x = 5;
x=x+11;
System.out.println(x);
上面的代码错!
为什么呢??
问题点数:0、回复次数:28Top
1 楼hanyaocsdn()回复于 2005-04-02 22:51:50 得分 0
关注ingTop
2 楼lionelchan()回复于 2005-04-02 23:05:15 得分 0
x = x + 11; //x+11被自动转成int型了,x是short, so it is wrong...Top
3 楼killme2008(为了生态平衡,请保护蛤蟆)回复于 2005-04-02 23:10:15 得分 0
楼上已经解释了Top
4 楼xubinvc(晴天)回复于 2005-04-02 23:11:16 得分 0
short x = 5;
x+=11;
System.out.println(x);
上面的代码对! 又应该怎样解释呢Top
5 楼dragonwy(肥肥)回复于 2005-04-02 23:17:53 得分 0
这有可能是类型转换机制的问题
我是这样理解的:X+=11之后
输出的X的类型为int型的
Top
6 楼xubinvc(晴天)回复于 2005-04-02 23:20:57 得分 0
dragonwy(肥肥)
我和你想的也是一样,但是x是short类型的呀,把一个int类型的值给short应该出错的呀!
他为什么又可以通过编译呢,怪^^^^^Top
7 楼killme2008(为了生态平衡,请保护蛤蟆)回复于 2005-04-02 23:24:11 得分 0
因为+=是赋值运算符,并不是算术运算符Top
8 楼godson_2003(载物)回复于 2005-04-02 23:49:44 得分 0
顶Top
9 楼slh002(呵呵)回复于 2005-04-03 00:43:31 得分 0
顶Top
10 楼smilefei(奇幻咖斐)回复于 2005-04-03 03:22:07 得分 0
它们所代表的字段不一样呀!!
可怎么感觉总是对的 值得研究Top
11 楼pzb19841116()回复于 2005-04-03 09:55:39 得分 0
到底是为什么呢?Top
12 楼oldmanpushcart(上善若水)回复于 2005-04-03 10:36:15 得分 0
关注ing...Top
13 楼oldmanpushcart(上善若水)回复于 2005-04-03 10:42:19 得分 0
为什么+运算会自动转换成为int类型呢?
这样做JAVA怕出现什么情况呢?
public class lxc
{
public static void main(String args[])
{
short x = 5;
x=(short)(11+x);
System.out.println(x);
}
}Top
14 楼jiuchaogudu(三井)回复于 2005-04-03 14:08:25 得分 0
前天去面试,正好遇到了这个问题,看来楼主已经解答过了
Top
15 楼TzcLove_Ancen(臻程)回复于 2005-04-03 15:19:37 得分 0
顶!!!!Top
16 楼xiaolinxx(林)回复于 2005-04-03 15:24:12 得分 0
x = x + 11; //x+11被自动转成int型了,x是short, so it is wrong...
--------
正确Top
17 楼maomingming(阿明)回复于 2005-04-03 15:35:08 得分 0
是啊,楼上说的很清楚啊Top
18 楼lionelchan()回复于 2005-04-03 17:04:52 得分 0
short x = 5;
x+=11;
System.out.println(x);
上面的代码对! 又应该怎样解释呢
---------------
+= 是赋值运算符,如果自动转换类型的话,怎么还会报错呢?
自动转换的话,想来有的恐怖。。。Top
19 楼fly44(甘蓝)回复于 2005-04-03 17:33:01 得分 0
x += 11; //这句话并没有转换类型 我测试后发现 x 并没有转换成 int型
public class TestCast {
public static void main(String[] args){
short x = 5;
x += 3;
short y ;
y = x ;
System.out.println("i" + i +"k" + k );
}
}
上面这段代码可以看出 如果x被自动转型为int的话 那么当执行 y=x 时就会报错
会说 cannot convert from int to short
实验结果 ^_^Top
20 楼zhaohao19853(小人物)回复于 2005-04-03 18:19:55 得分 0
学习Top
21 楼mingwang(冥王)回复于 2005-04-03 18:56:29 得分 0
x += 11 实际执行的是 x=(short)(x+11)Top
22 楼topil(认认真真学习,塌塌实实工作)回复于 2005-04-03 21:43:20 得分 0
mingwang(冥王) 说的是正确的,x=x+11(编译错误), x=(short)(x+11) (编译通过) ,而x+=11在编译的时候,系统会自动将其转成 x=(short)(x+11) 来进行编译。实际上a+=b这个操作符号只有在a为int的时候才等价于a=a+bTop
23 楼killme2008(为了生态平衡,请保护蛤蟆)回复于 2005-04-03 22:06:27 得分 0
+=,-=,*=等等都是复合赋值运算符,它自动处理类型提升和转换
TIJ里面已经讲过了,细看过书的话Top
24 楼mnbvc874(Java EE)回复于 2005-04-03 22:44:35 得分 0
学习了:)Top
25 楼sammyjeep()回复于 2005-04-03 23:09:49 得分 0
很多书上有得讲,我看的beginning java2上也有的,而且讲得很细的说。Top
26 楼midthinker(呵呵)回复于 2005-04-04 02:55:38 得分 0
学习了
@.@||~Top
27 楼jnzsk()回复于 2005-04-04 07:38:24 得分 0
学习到了,thanks!Top
28 楼zoeg(沉香)回复于 2005-04-04 08:04:37 得分 0
x+11:11被认为是int精度比x大,相加时被认为可能丢失精度Top




