选择符和赋值符优先级的疑惑

a ? a : a = b;
为什么是:
a ? a : (a = b);
而“?:”的优先级是高于“=”的...

对啊,所有先是
表达式1?(表达式2):(表达式3); 然后根据表达式1选择执行2/3 a=b是一个表达式

你这个问题其实就是关系运算符(=)与条件运算符(?:)的优先级的问题,关系运算符是优先条件运算符执行的

[quote]a ? a : a = b;
为什么是:
a ? a : (a = b);
而“?:”的优先级是高于“=”的... [/quote]

不知道你是哪里看来的,这段代码是错的。而且也不是a ? a : (a = b);

“?:”运算符的优先级高于“=”

所以在编译a ? a : a = b时按照这样的顺序来推断:(a ? a : a) = b

“=”左边的应该是一个变量,而(a ? a : a)是一个值,所以这段代码是通不过编译的。

在JS里面与Java中是不太一样的,上面的语句成分标示含义是a如果非空或为真,则返回a,否则执行语句a=b,比Java灵活很多

[code="java"]a ? a : a = b; [/code]编译是有错误,语法都不对
?:是三元操作符,结果必须是一个值,而表达式a=b不是值
boolean a=false;
boolean b=true;
System.out.println(a?a:a==b);[code="java"]

[/code]