Из этого фрагмента
int a = 10;
a = ++a * ( ++a + 5);
Иногда наиболее простым решением является использование javap для понимания порядка оценки:
0: bipush 10 // push 10 onto the stack (stack={10})
2: istore_1 // store 10 into variable 1 (a = 10, stack={})
3: iinc 1, 1 // increment local variable 1 by 1 (a = 11, stack={})
6: iload_1 // push integer in local variable 1 onto the stack (a = 11, stack = {11})
7: iinc 1, 1 // increment local variable 1 by 1 (a = 12, stack={11})
10: iload_1 // push integer in local variable 1 onto the stack (a = 12, stack = {12, 11})
11: iconst_5 // load the int value 5 onto the stack (a = 12, stack = {5, 12, 11})
12: iadd // add 5 and 12 (a = 12, stack = {17, 11})
13: imul // multiply 17 and 11 (a = 12, stack = {})
a
увеличивается на 1. (строка 3) // a = 11 a
увеличивается на 1. (строка 7) // a = 12 5
в a
(строка 12) // a = 17 11
на 17
(строка 13) // a = 187 (10 + 1 + 1 + 5) * 11 = 187