if(fName != null && fName.isEmpty())
在这个if表达式中,我们有4个运算符
1) . access object member
2) () invoke a method
3) != equality
4) && conditional AND
我按优先顺序列出,并且都具有相同的关联性,即从左到右
然后为什么这个表达式按照下面的顺序进行评估(据我所知)
1) !=
2) &&
3,4) . ()
答案 0 :(得分:3)
逻辑AND运算符(&&
)被短路。这意味着仅在左操作数计算为true时才评估右操作数。
因此首先评估fName != null
。
如果确实如此,则接下来评估fName.isEmpty()
,最后评估&&
运算符本身,因为在评估其操作数之前无法对其进行求值。
以下是JLS:
的相关引用15.7:
Java编程语言保证运算符的操作数似乎以特定的评估顺序进行评估,即从左到右。
15.7.1:
在评估右侧操作数的任何部分之前,二元运算符的左侧操作数似乎已完全评估。
15.7.2:
Java编程语言保证在执行操作本身的任何部分之前,操作符的每个操作数(条件运算符&&,||和?:)除外似乎都要完全评估。
答案 1 :(得分:0)
您发布的运营商 associativity 与此无关。