`
wenjinglian
  • 浏览: 816592 次
  • 性别: Icon_minigender_1
  • 来自: 株洲->深圳
社区版块
存档分类
最新评论

关于++的一道面试题

阅读更多

面试碰到这样一道题

public static void main(String args[]){
 int j = 0;
 for(int i = 0 ; i < 100 ; i ++)
  j = j++;
 System.out.println("j = " + j);
}

 

四个选项:

A.99   B.100  C.0  D.1

 

我当时想了下,选择了B。

 

面试时看见答案打了个X,回家试了答案确实不对。

 

还是有点疑惑。

分享到:
评论
28 楼 zxl10059 2011-04-10  
说下我的理解吧
首先i,j都是基本数据类型,所以应该是分配栈内存
j++会在分配新的内存空间K
但这个j++变量的作用域仅局限在for{ }中,所以当执行流完成for循环后
K的内存空间被销毁,再赋值的话,应该还是0
自己瞎想的,欢迎拍砖
27 楼 gglu 2011-04-10  
学习了。
26 楼 cat 2010-10-05  
同bs这样的面试题
25 楼 hekp 2010-10-04  
以前还真没有认真想过这样写i=i++ 呢
24 楼 风照原野 2010-10-04  
我还以为j=99呢
运行一下,结果j=0
23 楼 bcccs 2010-10-03  
<div class="quote_title">wenjinglian 写道</div>
<div class="quote_div">
<p>面试碰到这样一道题 </p>
<p>public static void main(String args[]){<br> int j = 0;<br> for(int i = 0 ; i &lt; 100 ; i ++)<br>  j = j++;<br> System.out.println("j = " + j);<br>}</p>
<p> </p>
<p>四个选项:</p>
<p>A.99   B.100  C.0  D.1</p>
<p> </p>
<p>我当时想了下,选择了B。</p>
<p> </p>
<p>面试时看见答案打了个X,回家试了答案确实不对。</p>
<p> </p>
<p>还是有点疑惑。</p>
</div>
<p>给他写==你妹</p>
<p>见到这样的题目,转身就走。不值得浪费时间。</p>
22 楼 onlylau 2010-10-03  
wmcoo 写道
JAVA 基础啊

J++是先赋值,再运算
++J是先运算,再赋值


看清楚这个题目,是j=j++;按你说的j++是先赋值再运算,那应该是先j=j;然后又j=j+1;那结果应该不是j=0;的呀

重要的是j=j++;这块在c语言和java中是一样的处理机制的
21 楼 holly2k 2010-10-03  
感觉面试的经常就是从题库里拿一些题来的,而这些题又很少真的会在现实编程中遇到
20 楼 wmcoo 2010-10-03  
JAVA 基础啊

J++是先赋值,再运算
++J是先运算,再赋值
19 楼 szcjlssx 2010-10-03  
很明显的是0嘛,这么弱智的题目
18 楼 wenjinglian 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

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


这道题做为面试题还是有点意思
17 楼 wenjinglian 2010-10-02  
<div class="quote_title">onlylau 写道</div>
<div class="quote_div">
<p>java的编译器在遇到i++和i- -的时候会重新为变量运算分配一块内存空间,以存放原始的值,而在完成了赋值运算之后,将这块内存释放掉<br><br>这个地方跟我们学习i++与++i时的c语言处理不一样<br><br>大家可以看一起这个地方详解:<a href="http://blog.csdn.net/majiabao123/archive/2009/05/17/4194473.aspx" target="_blank">http://blog.csdn.net/majiabao123/archive/2009/05/17/4194473.aspx</a></p>
<p> </p>
</div>
<p>谢谢,blog讲得很详细,C++我也试了确实不一样</p>
16 楼 chende001688 2010-10-02  
j++在后是先赋值给前面的j,还是0
15 楼 onlylau 2010-10-02  
<p>java的编译器在遇到i++和i- -的时候会重新为变量运算分配一块内存空间,以存放原始的值,而在完成了赋值运算之后,将这块内存释放掉<br><br>这个地方跟我们学习i++与++i时的c语言处理不一样<br><br>大家可以看一起这个地方详解:<a href="http://blog.csdn.net/majiabao123/archive/2009/05/17/4194473.aspx" target="_blank">http://blog.csdn.net/majiabao123/archive/2009/05/17/4194473.aspx</a></p>
<p> </p>
14 楼 onlylau 2010-10-02  
j = j++;
相当于你这里的j的值根本就没有变
13 楼 weiqiang.yang 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

居然是酱紫的。。
不过,就像上面某楼说的,谁这么写肯定抽死丫
12 楼 manchester1878 2010-10-02  
dicmo 写道
如果换成 ++j
结果就不一样了

问题主要出在赋值上,如果只是j++,最后的结果会和大多数人想的一样,但是在赋值时就不一样了
11 楼 wenjinglian 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 ++也有区别,学习了,不过我对栈理解不是很深,谢谢指教!
10 楼 dicmo 2010-10-01  
如果换成 ++j
结果就不一样了
9 楼 飞语001 2010-10-01  
以后面试多了,这种题肯定也就见的多了。

相关推荐

    一道关于项目整合的面试题

    一道关于项目整合的面试题

    CC++程序员应聘常见面试题.docx

    首先,让我们来看一道经典的面试题——手动实现`strcpy`函数。`strcpy`函数是C语言中用于复制字符串的库函数,它的正确实现是衡量一个C/C++程序员基本功的重要指标。题目1中,面试者被要求在有限的内存空间内复制...

    笔试面试题 一道面试题关于信息系统的问答和注意事项

    笔试面试题 一道面试题关于信息系统的问答和注意事项 【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的...

    企业公司软件测试面试笔试题集合 软件测试面试题

    企业公司软件测试面试笔试题集合 软件测试面试题 (测试基础).doc 01_企业面试试卷(综合).doc 01_企业面试试卷(综合)_参考答案.doc 04_企业面试试卷(测试基础).doc 04_企业面试试卷(测试基础)_参考答案.doc...

    一道关于Ajax、Jquery的面试题

    针对这道面试题,可能的问题方向包括: 1. **Ajax的基本工作原理**:解释Ajax是如何通过XMLHttpRequest对象实现异步通信的,涉及的步骤包括创建对象、打开连接、设置请求方法、发送请求、接收响应和处理数据。 2. ...

    各大公司面试题+IT面试宝典

    对于每一道面试题,不仅要给出答案,还要思考其背后的原理和优化空间。同时,关注行业动态,了解新技术和最佳实践,这将使你在面试中显得更有远见和洞察力。 记住,面试不仅仅是检验你的技能,也是你了解公司、展现...

    js面试题面试题面试题

    根据给定的文件信息,以下是对每一道JS面试题的知识点进行详细解析: ### 第一题:编写一个方法求一个字符串的字节长度 #### 解析: 在这道题目中,我们需要编写一个函数来计算字符串的字节长度。这里的重点在于...

    一道经典的前台程序员面试题

    这道"经典的前台程序员面试题"显然关注的是前端布局技术,特别是使用DIV和CSS来构建网页结构。这里,我们重点讨论这个话题,并通过提供的压缩包文件名暗示的可能内容进行深入探讨。 首先,让我们理解`DIV`元素。在...

    一道微软数据库面试题

    根据题目提供的信息,这是一道涉及SQL查询技巧的微软数据库面试题。虽然题目中的SQL代码与题目描述不完全对应,但我们可以基于题目描述中的信息来分析这个问题并给出解答。 ### 题目背景 题目描述指出,有一个表,...

    一道月工资三万的面试题

    根据给定的信息,我们可以推断出这是一道与算法相关的面试题目。虽然提供的部分内容看起来较为混乱,但结合标题、描述及标签,我们可以尝试解析并构建一个相对完整的算法问题。 ### 题目背景 一家知名公司在招聘...

    一道asp.net c#面试题

    在这个面试题中,我们看到的是一个典型的"观察者模式"(Observer Pattern)的应用。观察者模式是一种行为设计模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知...

    整理C#面试题10套

    "C#面试题10套" 本资源摘要信息涵盖了C#面试题10套,涵盖了C#、.NET、面试题等知识点,详细解释了每一个问题和答案。 问题一: 密码问题,涉及到逻辑思维和规则应用。问题中给出了五个字母K、L、M、N、O,要求在...

    Java 面试题 Java 面试题

    根据给定的文件内容,我们可以总结出一系列与Java面试相关的知识点。下面将详细解析每一道题目涉及的关键概念。 ### 第一部分:基础知识 #### 1. final, finally, finalize的区别 - **final**: 用于声明变量、方法...

    一道腾讯面试题

    这道2011年腾讯校招的面试题虽然没有明确的问题描述,但从标签中我们可以推测,它可能涉及C++、.NET、Java这三种编程语言中的某一方面,或者是关于算法设计与分析。面试题通常旨在考察候选人的思维能力、编程基础...

    c 经典面试题经典版

    《C语言经典面试题解析》 面试是评估潜在员工技能的重要环节,对于C/C++程序员而言,面试中常出现的经典问题往往围绕基础概念、编程技巧和逻辑思维能力。本文将深入探讨一些常见的C语言面试题,帮助你了解面试官...

    一道面试题的思考

    《一道面试题的思考——深入理解memcpy函数的实现》 在C语言中,`memcpy`函数是一个非常重要的内存操作函数,用于将一块内存区域的数据复制到另一块内存区域。在面试中,这个问题常用来测试候选人的基础知识、逻辑...

    【大厂面试题】史上最详细的一线大厂前端面试题详解及其答案

    【大厂面试题】史上最详细的一线大厂前端面试题详解及其答案 目录: 1、如何避免CDN为PC端缓存移动端页面 2、响应式开发剖析 3、页面渲染原理剖析 4、HTTPS工作流程 5、js防抖和节流剖析 6、js解决获取浏览器的唯一...

    java截取字符串程序,一道面试题。答案

    java截取字符串,一道面试题。好像没有找到正确答案,今天找时间做了一个,仅供参考。本人运行过了。

    华为面试题华为面试题华为面试题

    这篇内容涉及的是一道华为面试题,主要考察的是动态规划思想和数组操作。题目要求通过交换两个无序数组a和b中的元素,使得数组a的元素和与数组b的元素和之间的差值最小,最后输出这个差值。下面将详细解释解题思路和...

Global site tag (gtag.js) - Google Analytics