锁定老帖子 主题:令我迷惑的 i++
该帖已经被评为新手帖
|
|
---|---|
作者 | 正文 |
发表时间:2007-11-18
令我迷惑的 i++我在准备面试时遇见了着样一道题: java 代码
令人不解的是最后的输出结果为什么不是我所期望的 1 ,而是 0 。希望能有人用通俗易懂的语言,深入地帮我解释一下,谢谢。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2007-11-18
希望有人能把自己的Java教材读一遍再去应聘或者提问
|
|
返回顶楼 | |
发表时间:2007-11-18
基础不牢,搞清楚java方法是传值还是传引用
|
|
返回顶楼 | |
发表时间:2007-11-18
i = i++;不同于i++;
|
|
返回顶楼 | |
发表时间:2007-11-18
bilang 写道 基础不牢,搞清楚java方法是传值还是传引用
lz应该不是错再这里:inc.fermin(i); 而是i = i++; |
|
返回顶楼 | |
发表时间:2007-11-18
++ 在前面 加了再赋值
++ 在后面 赋值了再加 |
|
返回顶楼 | |
发表时间:2007-11-18
相信楼主的疑问不是在函数参数传递上,因为代码中标明了“陷阱”。
主要的不解是在 i = i++ ;这行代码。 看到楼主就看到了当年的我,今天和女朋友约会没接上头,比较郁闷,就说一下: 执行这一行代码前i=0,这是毫无疑问的,因为java中对基本类型是用的传值方式(是真实数值,而不是传递引用/指针的值),所以方法调用不会改变参数的原值。 对“i=i++”而言,首先要对i++求值,结果显然是0,原因如何相信看过java基础语法的人都知道。 然后内存中的i执行递增操作,i=1, 然后执行=,由于i++的结果是0,所以i又从1变成0。 over。 |
|
返回顶楼 | |
发表时间:2007-11-19
首先我说明一下,我自己很清楚 fermin(int i) 是按值传递,因此此方法的调用对调用程序没有影响,我想不清楚的是 i++ 的自增在什么时候进行.
|
|
返回顶楼 | |
发表时间:2007-11-19
thehim 写道 首先我说明一下,我自己很清楚 fermin(int i) 是按值传递,因此此方法的调用对调用程序没有影响,我想不清楚的是 i++ 的自增在什么时候进行.
还学人家写程序…… |
|
返回顶楼 | |
发表时间:2007-11-19
能出这样的面试题也够垃圾的,i=i++这种东西讨论起来一点意义都没有。不同的语言,即使是不同的编译器得出的结果也不一样。
对于java这个问题还是比较好解决,反编译一下就可以了。 int i=0; i=i++; 反编译结果 0: iconst_0 1: istore_1 2: iload_1 3: iinc 1, 1 6: istore_1 |
|
返回顶楼 | |