Java中点运算符评估的顺序

时间:2014-08-30 19:13:39

标签: java evaluation

受到another question的启发,我开始怀疑以下Java代码的定义是否正确:

public class Test {
    List<Object> foo;

    Object bar() {
        foo = new ArrayList<Object>():
        return(/* Anything */);
    }

    void frob() {
        foo.add(bar());
    }
}

在这种情况下,Java规范是否为frob中的点运算符指定了严格的评估顺序?是否保证从左到右的评估,以便add方法始终在bar用新列表替换字段之前的列表上执行,或者合法地允许编译器允许bar方法。 1}}在foo中提取frob字段之前执行,从而在新列表上执行add方法?

我怀疑从左到右的评估是有保证的,但是说明书中是否有这样的措辞呢?

1 个答案:

答案 0 :(得分:1)

是的,这是Run-time Evaluation of Method Invocation - Compute Target Reference

的一部分
  

如果表格涉及Primary . [TypeArguments] Identifier,则:

     
      
  • 如果调用模式是静态的,则没有目标引用。将评估Primary表达式,但结果是   丢弃。

  •   
  • 否则,评估Primary表达式,并将结果用作目标参考。

  •   

然后是evaluation of method arguments.