7

我将调用一个带有两个参数的方法,但我会像这样使用 k++:

polygon.addPoint((int)rs.getDouble( k++),(int)rs.getDouble( k++ ));

实际上我想确保jvm首先执行第一个参数,然后是第二个。如果不知何故顺序会改变,参数将被传递错误的顺序。

非常感谢!

4

3 回答 3

10

是的,保证从左到右评估参数。任何符合 JLS 规则的编译器都应该遵循这一点。JLS §15.7.4中提到了这一点:

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

于 2014-03-27T15:56:17.273 回答
9

是的,Java 保证了这一点。但是,这并不意味着使用这样的代码是一个好主意:您的代码的读者可能会完全糊涂。

明确地显示顺序要干净得多:

int a = (int)rs.getDouble(k++);
int b = (int)rs.getDouble(k++);
polygon.addPoint(a, b);
于 2014-03-27T15:59:15.453 回答
3

Java 不支持命名参数,因此您正确理解参数是按位置读取的。

例如,带有签名 (int, String) 的方法和带有签名 (String, int) 的方法永远不会相互混淆,Java 在确定调用什么方法时会考虑参数的类型和顺序。

同样,在您的方法中,您将始终以可预测且统一的方式输入参数。

出于这个原因,第一个 k++ 将始终首先执行,第二个 k++ 始终在其后执行,这是有保证的行为。

于 2014-03-27T15:56:53.050 回答