黑马程序员技术交流社区
标题:
求解:这道题的运行结果是什么?
[打印本页]
作者:
小丑的媳妇2
时间:
2013-3-8 23:44
标题:
求解:这道题的运行结果是什么?
高手看一下,下面代码的结果是多少?
package test;
public class Test
{
public static void main(String[] args)
{
int k = 0;
int ret = ++k + k++ + ++k + k;
// ret的值为多少
System.err.println(ret);
}
}
作者:
黑马-李嘉欣
时间:
2013-3-8 23:55
我计算的是8,不知道对不对??
作者:
何旭程
时间:
2013-3-8 23:59
输出的ret的值应该为8,首先k=0,++k为k先加1再得整个表达式的值,为1,此时k的值为1,k++为先得表达式的值再k加1,表达式值为1,此时k的值为2,(++k)+(k++)的值为2,++k的值为3,(++k)+(k++)+(++k)的值为5,此时K的值为3,最后(++k)+(k++)+(++k)+k的值为8.
作者:
谢玉成
时间:
2013-3-9 00:03
int ret = 1+1+3+3; //8{:soso_e204:}
作者:
wodeairenw
时间:
2013-3-9 00:04
你的代码运行出来时8.
作者:
罗正荣
时间:
2013-3-9 00:14
运行结果是8
int ret =
++k
+
k++
+
++k
+ k;
红色的K++参与运算的只是K,也就是自增前的K。
所以
++k
+
k++
=2,虽然
k++
只是自增前的K参与运算但是K还是自增了所以此时K=2
++k= 3
++k
+
k++
++k=
5 此时K已经等于3了
所以
++k
+
k++
++k + k=8
作者:
张卫刚
时间:
2013-3-9 00:28
输出结果为8
int k = 0;
int ret = ++k + k++ + ++k + k; 1+2+3+3
步聚:
1:++k k=1 也就是(++k) 把k的值变为1了
2:k++ k=2 也就是 (++k)+(k++) 把k的值变为2了
3:++k k=3 (++k)+(k++)+(++k) 把k的值变为5了
4:(++k)+(k++)+(++k)+k=8.
作者:
HM马明宇
时间:
2013-3-9 00:47
++k + k++ + ++k + k; ++符号的使用规则很明显,++在前先++后运算,++在后先运算再++,故可以分解如下四步:
1. ++k
+
2.k++
+
3.++k
+
4.k
(以下的彩色字体中的数字表示分解的步骤,不再当做数字来看)
1.时k先++,此时k已经是1了,而且++k为1
2.时k先参与运算,此时
1.+2.
的值为2,并且运算过后k++,此时k的值为2
3.时同1,k先++,此时k为3,
1.+2.+3.
为5
4.时
1.+2.+3.
为5,再加3,结果为8,k仍旧是3
下面是很好用的一招哦,再也不用担心前后++
这种题有一种很好的解题方式,如下所示(要注意运算结果与k值的先后顺序,在面试时在纸上写的时候可以有先后顺序的,这里
先写(++在前就先++,即先写k的值,再写运算结果)的用红色标出
,前面的1.2.3....是分解成的第几步)
运算结果 k值
1. 1
1
2.
2
2
3. 5
3
4. 8 3
(最后一步没有++,所以没有红色)
这种方式在面试时很有用哦 希望能给你一个思路 化繁为简~~
作者:
amen0205
时间:
2013-3-9 03:41
本帖最后由 门文通 于 2013-3-9 03:44 编辑
额 大家都回答的很好了 8
我做下总结吧
k++ 虽然只是k的原值参加运算 但 后面的k是完成了+1操作后的k OK
作者:
邹学良
时间:
2013-3-9 08:27
简单点说就是:
当ret=++k时,先将k的值加1,再将k的值赋值给ret。也就是k先自加为1赋值给ret,再返回1的值给K
当ret=k++时,先将k的值赋值给ret,再将k的值加1。也就是k先把1赋值给ret,再进行自加并返回自加值2给K
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2