2015-10-09 31 views
2
if(fName != null && fName.isEmpty()) 

在此,如果表达我们有4个运营商java的运算符优先级DOT VS逻辑与

1) . access object member 
2)() invoke a method 
3) != equality 
4) && conditional AND 

我列出了按优先级,并都具有相同的相关性,即从左到右

那么,为什么这个表达按以下顺序评估(据我所知)

1) != 
2) && 
3,4) .() 
+1

你期待它做什么呢? –

+0

我只想知道为什么编译器会按照顺序排列的顺序 –

+0

[Java中的评估顺序是什么规则?](http://stackoverflow.com/questions/6800590/what-are-the-规则为评估顺序在java) –

回答

3

逻辑与运算符(&&)短路。这意味着右操作数只在左操作数计算结果为真时才被评估。因此fName != null首先被评估。

如果这是真的,接下来会评估fName.isEmpty(),最后对&&运算符本身进行评估,因为在评估其操作数之前无法评估它。

下面是从JLS相关报价:

15.7:

Java编程语言保证运营商的操作数出现在一个特定的评估顺序进行评估,即从左至右。

15.7.1:

二进制运算符的左边的操作数出现的右侧操作数的任何部分被评估前被完全评估。

15.7.2:

Java编程语言保证操作的每一个操作数(除有条件的经营者& &,||和:)似乎任何部分前应充分评估?的操作本身执行。

+0

。@Eran但是&&的优先级低于。和()那么为什么它首先评估? –

+0

@AmitYadav &&操作符有两个操作数 - 左边是'fName!= null',右边是'fName.isEmpty()'。 – Eran

0
  • 在Java中,操作数从左到右计算。所以!=,作为& &左操作数的一部分,并具有更高的优先级,首先被评估。
  • & &如果操作数的左操作数为假,操作符不会评估其右操作数。

运营商联想性您发布的内容与其无关。