i just generate this methode to find max val in some matrix and somehowe i was able to change int
val insdie Ternary Operator (java 8)
int max=0, indexToReturn=0; int size= arr[0].length; for (int i=1 ; i < size ; i++) { // // ¯_(ツ)_/¯ max = (!(arr[j][indexToReturn] > arr[j][i])) ? indexToReturn= i : arr[j][indexToReturn] ; } return max > 0 || indexToReturn==size-1 ? arr[j][indexToReturn] : null;
(the method compile and working)
im not realy sure evan how its compile from what i saw online Ternary Operator syntax :
variable = Expression1 ? Expression2: Expression3
can someone explain me what im missing here ?
Advertisement
Answer
The reason this works is because an assignment is an expression. The value of an assignment is the value assigned. This sounds theoretical, so let us look at an example:
int i, k; i = (k = 5); System.out.println(i); System.out.println(k);
The value of the expression k = 5
is the assigned value 5
. This value is then assigned to i
.
Armed with this knowledge, we see that indexToReturn= i
is an expression that evaluates to the value of i
. When we swap Expression2
and Expression3
, the ternary operator breaks because the = i
is not evaluated as part of the ternary operator (due to operator precedence). If we set parentheses around Expression2
, it works as expected.
I would discourage using the fact that an assignment is an expression. (Ab)using this fact often leads to hard-to-understand code.