当前位置:  开发笔记 > 编程语言 > 正文

在Java中,post增量运算符如何在return语句中起作用?

如何解决《在Java中,post增量运算符如何在return语句中起作用?》经验,为你挑选了2个好方法。

给定以下代码,ixAdd会执行您期望的操作,即在增量之前返回ix的值,但在离开函数之前增加类成员吗?

class myCounter {
    private int _ix = 1;

    public int ixAdd()
    {
        return _ix++;
    }
}

当程序离开函数的堆栈帧(或Java中的任何内容)时,我不太确定post/pre increment的通常规则是否也适用于return语句.



1> Jon Skeet..:

关键部分是在计算表达式后立即发生后递增/递减.它不仅在返回发生之前发生 - 它发生在任何后续表达式被评估之前.例如,假设您写道:

class myCounter {
    private int _ix = 1;

    public int ixAdd()
    {
        return _ix++ + giveMeZero();
    }

    public int giveMeZero()
    {
        System.out.println(_ix);
        return 0;
    }
}

这也会打印出递增的结果,因为增量发生在giveMeZero()调用之前.



2> Michael Myer..:

好吧,让我们看看字节码(用于javap -c 自己查看):

Compiled from "PostIncTest.java"
class myCounter extends java.lang.Object{
myCounter();
  Code:
   0:   aload_0
   1:   invokespecial   #1; //Method java/lang/Object."":()V
   4:   aload_0
   5:   iconst_1
   6:   putfield    #2; //Field _ix:I
   9:   return

public int ixAdd();
  Code:
   0:   aload_0
   1:   dup
   2:   getfield    #2; //Field _ix:I
   5:   dup_x1
   6:   iconst_1
   7:   iadd
   8:   putfield    #2; //Field _ix:I
   11:  ireturn

}

如您所见,指令6和7 ixAdd()处理返回前的增量.因此,正如我们所期望的那样,递减运算符确实在return语句中使用时有效.但是请注意,dup在这两个出现之前有一条指令; 递增的值(当然)不会反映在返回值中.

推荐阅读
家具销售_903
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有