Пожалуйста, посмотрите на следующий код:Рабочая короткого замыкания и унарный
int i=5;
boolean b = i<5 && ++i<5;//line 2
System.out.println(i);//line 3, prints 5
В строке 2, по моему пониманию: Так как среди всех операторов, ++ имеет наивысший приоритет ++i
должны быть оценены первый. Но line 3
на самом деле печатает i=5
(и не 6
). Значение, & & оценил оператор ++. Как это возможно?
EDIT: Из ответов я вижу, что «на Java все выражения оцениваются слева направо». Но когда на самом деле начинается порядок приоритета. В следующем коде:
int a=1,b=1,c=1;
boolean b = a==b&&b==c;//Line2
Код строки2 будет просто запускаться слева направо. Сначала a == b оценивается тогда b == c, а затем & & оператор. Не могли бы вы объяснить больше?
выражения оцениваются слева направо - только тогда приоритет оператора используется для группировки «подрезультатов». – assylias
Не путайте приоритет оператора с порядком оценки. Это разные вещи. –
Кстати, порядок оценки не только вступает в игру с операторами короткого замыкания, но и с другими. Рассмотрим 'int n = 5; System.out.println (++ n + --n * 1000); ' –