一道简单java面试题,俺错了 int i=1;(i++)+(i++)+(i++)+(++i)+(i++)+(++i)是多少??哦,shit,我做错了,知道的告诉我结果,还有原理是怎样的 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 23j=i++是先赋值,然后i又加1j=++i是先加1,然后又赋值了 (i++)+(i++)+(i++)+(++i)+(i++)+(++i)是多少?? 1 2 3 5 ? ?+(i++)+(++i) 这个最后2个是怎么出来的啊 个最后2个是怎么出来的啊那个(i++) 返回的用于计算的是5但用完之后,i就等于6了然后(++i),先给i+1, 也就是7, 然后再返回用于计算 i++和++i的理解是一个方面,可能还有表达式操作数的求值顺序的问题,Java中规定了表达式的操作数求值顺序是从左往右,而C和C++标准中没有规定。 23 j=i++是先赋值,然后i又加1 j=++i是先加1,然后又赋值了1 + 2 + 3 + 5 + 5 + 7 = 23 i++ 是先赋值再运算 ++i 是先运算再赋值 原理是这样,不过出题的哥们可真是够无聊,搞这么多看的眼都花单独两个没什么区别,在表达式就要i++ 先使用后加 ++i 先加后使用 23 j=i++是先赋值,然后i又加1 j=++i是先加1,然后又赋值了 1 + 2 + 3 + 5 + 5 + 7 = 23 i++ 是先赋值再运算 ++i 是先运算再赋值 原理是这样,不过出题的哥们可真是够无聊,搞这么多看的眼都花 单独两个没什么区别,在表达式就要 i++ 先使用后加 ++i 先加后使用 (i++)+(i++)+(i++)+(++i)+(i++)+(++i)扯开看嘛,楼主主要是对后面2步有困惑,相信楼主也知道i++;++i的区别。1+2+3+5,不管是++i还是i++,前面只执行4步,所以4步后i == 5.然后再看 这个问题int i=5; 11+(i++)+(++i)会看了吧。答案很明显 11+5+7 = 23上面把答案算成25的朋友多半问题出现在第四步以后,扯开看问题更清晰。i++ 是先赋值再运算 ++i 是先运算再赋值 ,所以 后面会 出现 ···+5+5+··· 无聊呀,真无聊,当时我是用eclipse算的正确无误!! 计算之前i = 1;从左到右i的变化如下:(i++) + (i++) + (i++) + (++i) + (i++) + (++i)(1) + (2) + (3) + (5) + (5) + (7) = 23; 一 二 三 四 五 六一,i=1, 运算后i++,i变成2二,i=2, 运算后i++,i变成3三,i=3, 运算后i++,i变成4四,i=4,此时++i是先自加后再运算,所以括号里的值为4+1=5;i变成5;五,i=5, 运算后i++,i变成6六,i=6,此时++i是先自加后再运算,所以括号里的值为6+1=7;i变成7;这个例子的确只能是出现在考试中。 1+2+3+5+5+7=23分析:int i=1;(i++)(先付i=1再进行运算)+(i++)(通过上一步的运算,这时的i以是等于2了,所以现在i=2,再次进行运算)+(i++)(走到第三步时,这时的i以是等于3了,所以现在i=3,再次进行运算)+(++i)("++i"这表示的意思是先运算再付值,上一步i==3,再进行i++,所以这是的i等于4,止时的i再进行上次运算,所以止时的i==5了)+(i++)(止时的i=5,再进行运算)+(++i)(这和第四步一样); 一点都不无聊很有意思的题目问题的关键点我认为有二:一是对i++与++i的理解二是程序中的trick这个trick可以说是计数器导致的最主要的是分析最前面的一个加法,即(i++) + (i++)这个加法实际上丢掉了一次运算,因为i++的定义是先运算再赋值,而最后只能进行一次赋值,所以这次运算丢掉了一次自增运算而后面的第一次++i运算就不一样了前面一次运算i++后时i已经是4,这时++i则变成了5,所以是1+2+3+5从而最后答案是1+2+3+5+5+7=23 求助!怎么打印出list中的对象属性 把绝对路径改成相对路径 谁遇到过oracle 值冲突的问题。。。好急!! java中强制转换的问题 [高分求助]如何用C++或者Java得到Applet的控件信息或者点击事件 SDK1.5和SDK1.6有什么区别? 纸牌小问题,请帮忙! java中如何读ic卡 各位牛人请进。 对不起,耽误高手一点时间。(初学问题) 为什么不可以访问TOMCAT的WEBAPPS下我建的目录啊?谢谢啊... SUN的JAVA程序员认证考试
j=i++是先赋值,然后i又加1
j=++i是先加1,然后又赋值了
1 2 3 5 ? ?+(i++)+(++i) 这个最后2个是怎么出来的啊
但用完之后,i就等于6了
然后(++i),先给i+1, 也就是7, 然后再返回用于计算
j=i++是先赋值,然后i又加1
j=++i是先加1,然后又赋值了1 + 2 + 3 + 5 + 5 + 7 = 23
i++ 是先赋值再运算
++i 是先运算再赋值 原理是这样,不过出题的哥们可真是够无聊,搞这么多看的眼都花单独两个没什么区别,在表达式就要
i++ 先使用后加
++i 先加后使用
j=i++是先赋值,然后i又加1
j=++i是先加1,然后又赋值了 1 + 2 + 3 + 5 + 5 + 7 = 23
i++ 是先赋值再运算
++i 是先运算再赋值
原理是这样,不过出题的哥们可真是够无聊,搞这么多看的眼都花
单独两个没什么区别,在表达式就要
i++ 先使用后加
++i 先加后使用
扯开看嘛,楼主主要是对后面2步有困惑,相信楼主也知道i++;++i的区别。
1+2+3+5,不管是++i还是i++,前面只执行4步,所以4步后i == 5.
然后再看 这个问题
int i=5;
11+(i++)+(++i)
会看了吧。答案很明显 11+5+7 = 23
上面把答案算成25的朋友多半问题出现在第四步以后,扯开看问题更清晰。
i++ 是先赋值再运算 ++i 是先运算再赋值 ,所以 后面会 出现 ···+5+5+···
从左到右i的变化如下:
(i++) + (i++) + (i++) + (++i) + (i++) + (++i)
(1) + (2) + (3) + (5) + (5) + (7) = 23;
一 二 三 四 五 六
一,i=1, 运算后i++,i变成2
二,i=2, 运算后i++,i变成3
三,i=3, 运算后i++,i变成4
四,i=4,此时++i是先自加后再运算,所以括号里的值为4+1=5;i变成5;
五,i=5, 运算后i++,i变成6
六,i=6,此时++i是先自加后再运算,所以括号里的值为6+1=7;i变成7;这个例子的确只能是出现在考试中。
分析:
int i=1;
(i++)(先付i=1再进行运算)+(i++)(通过上一步的运算,这时的i以是等于2了,所以现在i=2,再次进行运算)+(i++)(走到第三步时,这时的i以是等于3了,所以现在i=3,再次进行运算)+(++i)("++i"这表示的意思是先运算再付值,上一步i==3,再进行i++,所以这是的i等于4,止时的i再进行上次运算,所以止时的i==5了)+(i++)(止时的i=5,再进行运算)+(++i)(这和第四步一样);
很有意思的题目问题的关键点我认为有二:
一是对i++与++i的理解
二是程序中的trick
这个trick可以说是计数器导致的
最主要的是分析最前面的一个加法,即(i++) + (i++)
这个加法实际上丢掉了一次运算,因为i++的定义是先运算再赋值,而最后只能进行一次赋值,所以这次运算丢掉了一次自增运算
而后面的第一次++i运算就不一样了
前面一次运算i++后时i已经是4,这时++i则变成了5,所以是1+2+3+5
从而最后答案是1+2+3+5+5+7=23