【问题标题】:Java performs the increment operation after return on object references [duplicate]Java在对象引用返回后执行递增操作[重复]
【发布时间】:2018-11-21 16:00:02
【问题描述】:

我有这个代码:

public class counter {
    public static void main(String[] args){
        double[] array = new double[10];
        for(int i=0;i<array.length;i++) array[i] = i;
        printArray(array);
        double result = doSomething(array);
        printArray(array);
    }
    public static void printArray(double[] arr){
        for(double d : arr) System.out.println(d);
    }
    public static double doSomething(double[] array){
        return array[0]++;
    }
}

我了解到,在 return 语句之后不再执行代码,并且 increment++ 会在下一个表达式处增加值。所以在我看来,数组array[0] 的第一个元素不应该增加是合乎逻辑的。

但是输出数组是 {1,1,2,3,4,5,6,7,8,9}

【问题讨论】:

  • 您的增量不是返回语句之后。它在 inside return 语句中。
  • 这里有问题吗?显然,你认为合乎逻辑的事情并非如此。 variable++ 是一个表达式,它产生变量在递增之前的值,并且还会在表达式完成之前递增变量

标签: java return increment order-of-execution


【解决方案1】:

return 语句后不再执行代码

没错。但是++ 不是 return 语句之后,它是 它的一部分

你的代码相当于:

int temp = array[0];
array[0] = temp + 1;
return temp;

【讨论】:

    【解决方案2】:

    array[0]++ 包含在 return 语句中。 因此,增量值存储在数组 [0] 中(即数组 [0] = 1) 不要误以为增量将在 return 语句之后进行,因为它是后增量

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-23
      相关资源
      最近更新 更多