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

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

我对函数调用和增量运算符感到困惑。有人可以解释一下实际结果吗?


问题答案:

首先你需要知道的区别x++++X;

如果是x++

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

如果是++x

首先,当前值将增加,然后将使用它(增加的值),这意味着您将在此操作中获得增加的值,而在此操作之后将获得其他值。

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

方法:sample1():

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

此方法将采用int值,然后先返回它,然后尝试递增,但是返回后,变量i将超出范围,因此它将永远不会递增。exp in: 10-> out 10

方法:sample2():

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

此方法将获取一个int并先对其进行递增,然后返回它。 exp in: 10-> out 11

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

现在获取主要方法的代码

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;


 类似资料:
  • 我有以下代码: 我的预期输出是注释。实际输出如下: 我对函数调用和输入运算符感到困惑。有人能好心解释一下实际结果吗?

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

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

  • 增量运算符++将1添加到其操作数,减量运算符 - 从其操作数中减去1。 因此 - x = x+1; is the same as x++; 同样 - x = x-1; is the same as x--; 递增和递减运算符都可以在操作数之前(前缀)或后跟(后缀)。 例如 - x = x+1; can be written as ++x; // prefix form 或者 - x++; /

  • AWK支持以下递增和递减运算符 - Pre-Increment 它由++表示。 它将操作数的值递增1 。 此运算符首先递增操作数的值,然后返回递增的值。 例如,在以下示例中,此运算符将操作数a和b的值设置为11。 例子 (Example) awk 'BEGIN { a = 10; b = ++a; printf "a = %d, b = %d\n", a, b }' 执行此代码时,您将获得以下结

  • 在对一个变量做加 1 或减 1 处理时,可以使用自增运算符 ++ 或自减运算 --。 ++ 或 -- 是单目运算符,放在操作数的前面或后面都是允许的。++ 与 -- 的作用是使变量的值增 1 或减 1。 操作数必须是一个整型或浮点型变量。自增、自减运算的含义及其使用实例如表 1 所示。 表 1 自增、自减运算的含义及其使用实例 运算符 含义 实例 结果 i++ 将 i 的值先使用再加 1 赋值给