这个三元运算符如何处理这个语句?

how this Ternary Operator work with this statemnt?

我只是生成了这个方法来在一些矩阵中找到最大值并且不知何故我能够改变 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;

(方法编译运行)

我不太确定 evan 如何根据我在网上看到的三元运算符语法进行编译:

variable = Expression1 ? Expression2: Expression3

有人可以解释一下我在这里缺少什么吗?

之所以可行,是因为赋值是一个表达式。分配的值是分配的值。这听起来很理论,所以让我们看一个例子:

int i, k;
i = (k = 5);
System.out.println(i);
System.out.println(k);

Ideone demo

表达式k = 5的值是赋值5。然后将该值分配给 i.

有了这些知识,我们可以看到 indexToReturn= i 是一个计算结果为 i 的表达式。当我们交换 Expression2Expression3 时,三元运算符会中断,因为 = i 未被评估为三元运算符的一部分(由于运算符优先级)。如果我们在 Expression2 周围设置括号,它会按预期工作。


我不鼓励使用赋值是表达式这一事实。 (Ab)使用这个事实通常会导致难以理解的代码。