论坛首页 招聘求职论坛

关于++的一道面试题

浏览 10206 次
精华帖 (0) :: 良好帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2010-10-01  
如果换成 ++j
结果就不一样了
0 请登录后投票
   发表时间:2010-10-01  
chimer 写道
看到这个题目我才注意到它和C++ 处理 ++ 时候的不同

C中  j = j++; 是这么处理的

// ......略以上
// edx 寄存 j
mov         edx,dword ptr [ebp-4]  // j=j
add         edx,1                  // j++
mov         dword ptr [ebp-4],edx


拆开就是  先处理 j=j ,再处理 j++

-----------------------------------------

java 是这么做的


   0:   iconst_0
   1:   istore_1  // j
   2:   iconst_0
   3:   istore_2  // i
   4:   iload_2
   5:   bipush  100
   7:   if_icmpge       21
   10:  iload_1      // 栈顶压入 j 的值 0
   11:  iinc    1, 1 // j++ ,可以看到已经做了 i++,但是操作的地方确是局部变量的值,没有动栈顶 iload_1 的那个 0
   14:  istore_1     // 存储栈顶的 0 到 j ,所以多少次运算,j还是0
   15:  iinc    2, 1 // 可以看到做 i++ 的时候并没有相关的栈操作
   18:  goto    4

--------------------------

看出这个运算的区别还是挺大的,主要在于值的复制


关于一些指令:
iconst_0   将int型0推送至栈顶
istore_n   将栈顶int型数值存入第 n 个本地变量
iload     将指定的int型本地变量推送至栈顶


C++与java ++也有区别,学习了,不过我对栈理解不是很深,谢谢指教!
0 请登录后投票
   发表时间:2010-10-02  
dicmo 写道
如果换成 ++j
结果就不一样了

问题主要出在赋值上,如果只是j++,最后的结果会和大多数人想的一样,但是在赋值时就不一样了
0 请登录后投票
   发表时间:2010-10-02  
0:   iconst_0
1:   istore_1
2:   iconst_0
3:   istore_2
4:   goto    15
7:   iload_1
8:   iinc    1, 1
11:  istore_1
12:  iinc    2, 1
15:  iload_2
16:  bipush  100
18:  if_icmplt       7

居然是酱紫的。。
不过,就像上面某楼说的,谁这么写肯定抽死丫
0 请登录后投票
   发表时间:2010-10-02  
j = j++;
相当于你这里的j的值根本就没有变
0 请登录后投票
   发表时间:2010-10-02  

java的编译器在遇到i++和i- -的时候会重新为变量运算分配一块内存空间,以存放原始的值,而在完成了赋值运算之后,将这块内存释放掉

这个地方跟我们学习i++与++i时的c语言处理不一样

大家可以看一起这个地方详解:http://blog.csdn.net/majiabao123/archive/2009/05/17/4194473.aspx

 

1 请登录后投票
   发表时间:2010-10-02  
j++在后是先赋值给前面的j,还是0
0 请登录后投票
   发表时间:2010-10-02  
onlylau 写道

java的编译器在遇到i++和i- -的时候会重新为变量运算分配一块内存空间,以存放原始的值,而在完成了赋值运算之后,将这块内存释放掉

这个地方跟我们学习i++与++i时的c语言处理不一样

大家可以看一起这个地方详解:http://blog.csdn.net/majiabao123/archive/2009/05/17/4194473.aspx

 

谢谢,blog讲得很详细,C++我也试了确实不一样

0 请登录后投票
   发表时间:2010-10-02  
weiqiang.yang 写道
0:   iconst_0
1:   istore_1
2:   iconst_0
3:   istore_2
4:   goto    15
7:   iload_1
8:   iinc    1, 1
11:  istore_1
12:  iinc    2, 1
15:  iload_2
16:  bipush  100
18:  if_icmplt       7

居然是酱紫的。。
不过,就像上面某楼说的,谁这么写肯定抽死丫


这道题做为面试题还是有点意思
0 请登录后投票
   发表时间:2010-10-03  
很明显的是0嘛,这么弱智的题目
0 请登录后投票
论坛首页 招聘求职版

跳转论坛:
Global site tag (gtag.js) - Google Analytics