当前位置: 首页 > 知识库问答 >
问题:

Java增量运算符查询(++i和i++)[重复]

凤财
2023-03-14

我有以下代码:

public class Book {
    private static int sample1(int i) {
        return i++;
    }
    private static int sample2(int j) {
        return ++j;
    }

    public static void main(String[] arguments){ 
        int i = 0;
        int j = 0;
        System.out.println(sample1(i++)); //0
        System.out.println(sample1(++i)); //1
        System.out.println(sample2(j++));//1
        System.out.println(sample2(++j));//2
        System.out.println(i);//2
        System.out.println(j);//2
    }
}

我的预期输出是注释。实际输出如下:

0
2
1
3
2
2

我对函数调用和输入运算符感到困惑。有人能好心解释一下实际结果吗?

共有1个答案

董品
2023-03-14

首先,您需要知道x++++x之间的区别;

x++:

首先将使用当前值,然后将其递增。这意味着您将获得x的当前值,如果您下次使用x,将获得增量值;

++X的情况下:

首先,当前值将被递增,接下来将被使用(递增值),这意味着您将在此操作中获得递增值,在此操作之后获得其他值。

现在让我们拆分代码并分别讨论它们

方法:sample1():

private static int sample1(int i) {
    return i++;
}

这个方法将首先返回一个int,然后尝试递增,但是在返回变量i之后,它将超出范围,因此它将永远不会被递增。Exp In:10->out 10

方法:样本2():

private static int sample2(int j) {
    return ++j;
}

这个方法将取一个int并首先递增它,然后返回它。输入输出:10->输出11

在这两种情况下,只有变量会在本地发生变化,这意味着如果从main方法调用,main方法的变量不会受到变化的影响(因为sample1()和sample2()正在复制变量)

现在介绍main方法的代码

System.out.println(sample1(i++)); // it's giving sample1() `i=0` then making `i=1` 
                                  //  so  sample1() will return 0 too;

System.out.println(sample1(++i)); // it's making `i=2` and then giving sample1() `i=2`
                                  // so sample1() will return 2;

System.out.println(sample2(j++)); // it's giving sample2() `j=0` then making `j=1` 
                                  // so sample2() will return 1;

System.out.println(sample2(++j)); // it's making `j=2` giving sample2() `j=2` then  
                                  // so sample2() will return 3;
 类似资料:
  • 问题内容: 我有以下代码: 我的预期输出在注释中。实际输出如下: 我对函数调用和增量运算符感到困惑。有人可以解释一下实际结果吗? 问题答案: 首先你需要知道的区别和; 如果是: 首先,将使用当前值,然后将其递增。这意味着您将获得操作的当前值,并且如果您下次使用x将获得递增的值; 如果是: 首先,当前值将增加,然后将使用它(增加的值),这意味着您将在此操作中获得增加的值,而在此操作之后将获得其他值。

  • 问题内容: 我不明白为什么这个职位增加方程不增加。我以为在+=操作之后,该值将增加1,然后围绕i的第二次将具有1值。但是输出是一个零零的无限循环。有谁能解释为什么“ i”不增加。 问题答案: @ njzk2的答案是正确的,但指出正确的 原因 很有用。 还有其他可能性-例如,为什么Java在分配后不执行postincrement运算符?(答案:因为那不是Java语言设计者选择的) Java语言规范第

  • 问题内容: 我对post 和pre 运算符感到困惑,例如以下代码 会打印10吗? 它打印10,但我希望它应该打印11 但是当我这样做 它会按照我的预期输出11,所以为什么x = x ++; 不会改变x的值? 问题答案: 否,正确的打印输出为10。理解结果背后原因的关键是预分配和后分配复合分配之间的差异。当使用预增量时,表达式的值在执行增量后获取。但是,当您使用后递增时,表达式的值 在 递增 之前

  • 问题内容: 哪个更正确?Java的结果为12或C =13。或者,如果不是正确性,请详细说明。 问题答案: 没有比这更正确的了。它实际上是未定义的,称为序列点错误。 http://en.wikipedia.org/wiki/Sequence_point

  • 问题内容: 当我运行以下示例时,我得到输出0,2,1 我不明白为什么输出是0,2,1而不是0,2,2 问题答案: 意思是现在。调用打印,但返回0,所以和 在此之前,现在想象被调用并替换为0 所以 现在它将是 用简单的话(从这里 @ Piotr) “ i = i ++”大致翻译为 另一个这样的例子: 同样的基本原理

  • 问题内容: 如何理解java中的 i 和i ? 问题答案: a 先自增,然后使用变量。 a 先使用,然后自增。 如果你有 然后 现在是 2