当前位置: 首页 > 面试题库 >

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

鲁成天
2023-03-14
问题内容

给定以下代码,ixAdd会做您期望的事情,即在增量之前返回ix的值,但是在离开函数之前递增类成员吗?

class myCounter {
    private int _ix = 1;

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

当程序离开函数的堆栈框架(或Java中的任何内容)时,我不太确定后/前递增的常规规则是否也适用于return语句。


问题答案:

关键部分是在对表达式求值后,将 立即执行 后递增/递减操作。它不仅发生在返回发生之前,而且还发生在对任何后续表达式求值之前。例如,假设您写了:

class myCounter {
    private int _ix = 1;

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

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

那也将打印出增加的结果,因为增加发生在giveMeZero()调用之前。



 类似资料:
  • 问题内容: 当我回答另一个问题时我遇到了一个带有顶层语句的Node.js模块。例如: 这可以正常工作并且没有错误并可以打印: 在标准输出中,但不是“ ”- 实际停止执行。 但是根据ECMAScript 5.1中 的语句规范, 语义学 如果ECMAScript程序 包含不在内的return语句,则在语法上_被视为 _不正确 。 在上面显示的程序中没有任何功能。 那为什么不扔呢? 问题答案: TL;

  • 问题内容: 为什么当我在做时它起作用,但是当我在做时: 它不起作用? 为什么,以及如何解决? 完整代码: 但是这段代码可以正常工作: JSFiddle:https ://jsfiddle.net/69z2wepo/55100/ 问题答案: 这样一来,您就可以改变状态,因为它和做是同一件事。您永远不要改变状态(请参阅https://facebook.github.io/react/docs/comp

  • 问题内容: 因此,我正在为不和谐而开发一个聊天机器人,现在正在开发一个可以用作待办事项列表的功能。我有一个命令可以将任务添加到列表中,并将它们存储在字典中。但是,我的问题是以更易读的格式返回列表(参见图片)。 任务存储在一个称为中。但是,为了使bot实际发送消息,我需要使用一条语句,否则它将仅将其打印到控制台而不是实际的聊天记录(参见图片)。 这是我尝试解决的方法,但是由于我使用了for循环,因此

  • 根据这一环节中的信息,后置增量和递减运算符占据首位。这个链接上写着“举个例子: foo=*P++; 这里,p作为表达式的一个副作用而递增,但是foo的值是*(p++)而不是(*p)++,因为一元运算符是从右到左绑定的“。 但在这样做之后,几乎没有发生任何信息在这些链接中提到。 在上面的实验中,只有在语句结束符之后才能看到post增量的效果。但是,如果对赋值运算符的右操作数执行post增量,则即使在

  • 问题内容: 从下面或此处的程序中,为什么最后一次调用要打印该值7? 问题答案: 这将打印出“ 6”,因为它将i加1并返回值。5 + 1 = 6;这是前缀,在操作中使用该编号之前会添加该编号。 这将打印出“ 6”,因为它需要i,存储副本,加1并返回副本。因此,你获得了我当时的价值,但同时又增加了它。因此,你可以打印出旧值,但是它会增加。后缀增量的好处。 然后,当你打印出i时,它会显示i的实际值,因为

  • 问题内容: 我正在尝试了解轮班经营者,但收获不多。当我尝试执行以下代码时 我得到以下 有人可以解释一下吗? 问题答案: 将二进制2()向左移动11次。因此:1000000000000 将二进制2()向左移动22次。因此: 现在,int为4字节,因此为32位。因此,当你偏移33时,它等效于偏移1。因此:100