На самом деле я китбхат в C. Я только начал изучать Java. И непосредственно готовятся к сертификации OCJP6. В книге Кэти-Сьерра, а также в экзаменационной программе также нет приоритета Оператора. Но я был в полном смятении, когда увидел таблицу приоритетов Java-операторов от orablce-sun Documentation.Работает ли приоритет Java-операторов при сравнении с перспективой на языке C?
From my C-Language: Operators(44) precedence table
1)() [] .(dot)
2)Unary: ++pre/--pre, -, +, (cast)
3)Arithmetic:
4)bitshift
5)relational:
6)bitwise:
7)logical:
8)ternary Operator ?:
9)Assignment operators = += -== etc
10) unary post++/post--
//In C if i say..
int main()
{
int i = 1, j;
j = i++;
/*
The above expression is solved based on the operators precedence!
2 operators i have used!
one is unary post, another is assignment.
here, assignment is higher precedence then unary post.
So, first i value is assigned to j.
then, i value is incremented because of post increment operator!
*/
printf("i = %d, j = %d", i, j);// i = 2, j = 1
return 0;
}
Java Operators precedence table
1)postfix expr++ expr--
2)unary ++expr --expr +expr -expr ~ !
3) arithmetic
4)shift << >> >>>
5)relational < > <= >= instanceof
equality == !=
6)bitwise AND &
bitwise exclusive OR^
bitwise inclusive OR |
7)logical AND &&
logical OR ||
8)ternary ? :
9)assignment = += -= *= /= %= &= ^= |= <<= >>= >>>=
//What my biggest doubt is...!
class Test
{
public static void main(String[] args)
{
int i = 1, j;
j = i++;
/*
according to the operators precedence table!
unary post operator is 1st precedence than assignment operator!
This way first i value should be increment!
then after assignment should happen!
How come here also i am getting the same values as in C language?
*/
//System.out.printf("i = %d, j= %d", i, j); //i = 2, j = 1
System.out.println("i = "+i+", j = "+j); // i = 2, j = 1
}
}
Пожалуйста, уточните меня!
Этот ответ верен, одно замечание, которое вам не хватает, важно отметить, что '++' как оператор postfix вернет исходное значение перед его мутированием. Это может быть важно упомянуть OP. –
@Peter Lawrey, я так понял, что на самом деле разница между порядком оценки и приоритетом! Не могли бы вы подробно рассказать об этом? Я изучил язык C таким образом только в классе. и мои все выходы правильны в соответствии с этой перспективой. Предположите выражение int a = 2 - 7 + 3 * 4; * оператор имеет более высокий приоритет, чем + и -. Я думал, что на основе выражения приоритета операторов оценивается! я сказал, теперь другое дело! можете ли вы прояснить мне, что является приоритетом и каков порядок оценки. – Omkar
Предварительная проверка - оператор порядка анализируется для определения того, что применяется в каком порядке. Это то же самое, что и порядок оценки в простейшем случае, вплоть до точки, где есть побочные эффекты. В случае Java post ++ и - оцениваются в конце, так как, по идее, они могут возникать в любое время (и, действительно, в C) –