[英]how this Ternary Operator work with this statemnt?
我只是生成这个方法来在某个矩阵中找到最大 val 并且不知何故我能够改变int
val insdie 三元运算符(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;
(方法编译和工作)
我不确定埃文是如何根据我在网上看到的三元运算符语法编译的:
variable = Expression1 ? Expression2: Expression3
有人可以解释一下我在这里缺少什么吗?
之所以可行,是因为赋值是一个表达式。 赋值的值就是赋值的值。 这听起来很理论,所以让我们看一个例子:
int i, k;
i = (k = 5);
System.out.println(i);
System.out.println(k);
表达式k = 5
的值是赋值5
。 然后将该值分配给j
。
有了这些知识,我们看到indexToReturn= i
是一个计算结果为i
的表达式。 当我们交换Expression2
和Expression3
时,三元运算符会中断,因为= i
没有作为三元运算符的一部分进行评估(由于运算符优先级)。 如果我们在Expression2
周围设置括号,它会按预期工作。
我不鼓励使用赋值是表达式的事实。 (Ab) 使用这个事实通常会导致难以理解的代码。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.