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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 小丑的媳妇2 中级黑马   /  2013-3-8 23:44  /  1310 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

高手看一下,下面代码的结果是多少?

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);
}
}

9 个回复

倒序浏览
我计算的是8,不知道对不对??
回复 使用道具 举报
输出的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.
回复 使用道具 举报
int ret = 1+1+3+3;   //8{:soso_e204:}
         
回复 使用道具 举报
你的代码运行出来时8.
回复 使用道具 举报
运行结果是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
回复 使用道具 举报
输出结果为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.

回复 使用道具 举报
++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
(最后一步没有++,所以没有红色)

这种方式在面试时很有用哦 希望能给你一个思路  化繁为简~~

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1 赞一个!

查看全部评分

回复 使用道具 举报
本帖最后由 门文通 于 2013-3-9 03:44 编辑

额  大家都回答的很好了   8

我做下总结吧

k++   虽然只是k的原值参加运算  但 后面的k是完成了+1操作后的k  OK

回复 使用道具 举报
简单点说就是:
当ret=++k时,先将k的值加1,再将k的值赋值给ret。也就是k先自加为1赋值给ret,再返回1的值给K

当ret=k++时,先将k的值赋值给ret,再将k的值加1。也就是k先把1赋值给ret,再进行自加并返回自加值2给K
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马