Давайте рассмотрим следующий код:
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++;
?