почему есть разница между return ++ arg и return arg ++ - PullRequest
0 голосов
/ 20 октября 2019

Давайте рассмотрим следующий код:

 class Year{
   int nextyear (int curr_year){
     return curr_year++;
   } 

     int nextyear2 (int curryear){
     return ++curryear;
   } 
 }
class Main {
 public static void main(String[] args) {
   Year var = new Year();
   int year=2008;
   System.out.println(var.nextyear(year));
   System.out.println(var.nextyear2(year));

 }
}

System.out.println (var.nextyear (year)); -> распечатывает 2008 System.out.println (var.nextyear2 (year)); -> Распечатывает 2009, но почему? если у нас есть « return expr; », как я понял, это то, что выражение expr всегда будет вычисляться при необходимости, прежде чем оно будет возвращено.

, так почемучто-то вроде

int a=8;
int b=9;
return a+b;

вернет 17, а что-то вроде

int a=5;
return a++;

вернет 5? Поэтому мой вопрос заключается в том, почему сначала не вычисляется, а затем возвращается значение ++. Обратите внимание, что я знаю о разнице между ++ a и ++

. Это то, что меня смущает:

какЯ понял, что-то вроде array[expr];, int var= expr; и т. Д. Выражение expr всегда будет вычисляться первым до того, как оно будет использовано, например, будет вычислено int var=5+6 5 + 6 и окончательный результат будетНазначено, почему это не происходит с expr++;? дело в том, что expr ++ является арифметическим выражением, похожим на expr + 1, так почему системе не нужно выполнять это вычисление, особенно в таких случаях, как expr++ > 1;?

, если я пишу что-то вроде: a++ > 1; a ++ - это арифметическое выражение, которое необходимо вычислить, чтобы вычислить оператор expr>1;, как может получиться, что a ++> 1 вычисляется с использованием старого значения a, а затем увеличивается на 1, это будет означать, что кодпридется вернуться к утверждению а ++, а затем рассчитать его?

то же самое Проблема с возвратом: если мы напишем что-то вроде return a++; и программа перейдет обратно к вызывающей стороне со старым значением a, когда будет вычислен оператор a++;?

...