将参数传递给方法总是在java中从左到右排序吗?

Posted

技术标签:

【中文标题】将参数传递给方法总是在java中从左到右排序吗?【英文标题】:Is Passing Arguments to a method always ordered left to right in java? 【发布时间】:2014-05-06 17:35:34 【问题描述】:

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

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

实际上我想确保 jvm 先执行第一个参数,然后执行第二个。如果顺序会以某种方式发生变化,则参数将按错误顺序传递。

非常感谢!

【问题讨论】:

创建两个不同的整数会使这段代码更容易维护恕我直言。 虽然应该保证排序,但我不会依赖这个,特别是如果有简单的方法可以摆脱这种依赖。 【参考方案1】:

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

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

【讨论】:

感谢您的回答和参考:)【参考方案2】:

Java不支持命名参数,所以你理解参数是按位置读取是正确的。

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

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

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

【讨论】:

OP 基本上询问左边的 k++ 是否会在右边的 k++ 之前执行,以及是否可以保证。不知道你在哪里解决这个问题。 彼得,你是对的,我已经修改了我的答案,谢谢你的意见。【参考方案3】:

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

明确显示顺序更简洁:

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

【讨论】:

以上是关于将参数传递给方法总是在java中从左到右排序吗?的主要内容,如果未能解决你的问题,请参考以下文章

在Splitviewcontroller中从左到右改变Masterview的位置

在无限循环中从左到右,从右到左平移动画箭头图像

在iOS中从左到右滚动时如何在Web视图中获取滚动方向?

背景梯度:物镜C中从左到右线性

无法让 div 在 jQuery 中从左到右设置动画

python 在python中从左到右构造一个b树