Java中参数的执行顺序保证?

tpd*_*pdi 63 java specifications operator-precedence jls

给出以下函数调用C:

fooFunc( barFunc(), bazFunc() );
Run Code Online (Sandbox Code Playgroud)

执行的顺序barFuncBazFunc未指定,因此barFunc()可以在in 之前bazFunc()bazFunc()之前调用.barFunc()C

Java指定函数参数表达式执行顺序或喜欢的C是不确定?

Mic*_*ter 71

Java语言规范(表达式):

15.7.4从左到右评估参数列表

在方法或构造函数调用或类实例创建表达式中,参数表达式可能出现在括号内,用逗号分隔.每个参数表达式似乎在其右边的任何参数表达式的任何部分之前被完全计算.

  • @Jon我不同意!如果它在规范中,那么你可以依赖它.例如,要从文件中读取矩形,我使用以下代码:myRect = new Rectangle(scan.nextInt(),scan.nextInt(),scan.nextInt(),scan.nextInt()); 它简洁明了.较长的实施将是不必要的复杂性. (43认同)
  • 虽然这是真的,但请不要以使其依赖于执行顺序的方式编码.它只是在不添加功能的情况下增加复杂性. (9认同)
  • 实际上,"建议代码不要严格依赖于此规范." http://java.sun.com/docs/books/jls/third_edition/html/expressions.html#15.7 (8认同)
  • @Jon如果Java在构造函数链接调用之前允许临时变量声明,我会同意你的看法.但是,在将构造函数链接与复杂成员初始化相结合时,我认为没有可行的替代方法来依赖此行为. (7认同)
  • 我用它来避免在许多地方保存局部变量,并使解码器中每个函数调用的代码更短1/2行:D.避免许多局部变量(除非产生更复杂的代码)通常也是很好的设计. (4认同)
  • 加入这个派对有点晚了,但我有一个方法将字节组合成一个我称之为的int:toInt(data [offset ++],data [offset ++],data [offset ++],data [offset ++]).我懒得改变这段代码,所以我很高兴它会起作用. (4认同)