这条线返回了什么?

war*_*tar 0 java

int lf = ((t.left==null) = (t.right==null)) ? 1:0;
Run Code Online (Sandbox Code Playgroud)

如果较大括号中的语句为真,则返回1,但在中间,是否为lefT分配正确的值?

Lee*_*ere 10

通常你有一个等号分配.赋值的返回与表达式的RHS相同.

您将在if中的表达式中使用等号,以便同时分配和检查结果.

// return first and third items added if they exist.
if ((list = GetItems()).Length > 2) { return list[0] + list[2]; } 
Run Code Online (Sandbox Code Playgroud)

在这里你所拥有的只是一个编译器错误,因为t.left==null求值(true/false)并且你不能分配给它.

  • 关于这种语法技巧的一点警告,如果过度使用它会变得非常混乱.`if(((area = length*width)> 100)&&(area <1000)&&((area2 = length2*width2)> 1000)&&((totalarea = area + area2)<(absolutemaxarea =(area4 = area5 +) area6) - bufferarea))){return absolutemaxarea - totalarea + bufferarea; } //刚刚发生的事情 (3认同)