将参数传递给方法总是在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中从左到右排序吗?的主要内容,如果未能解决你的问题,请参考以下文章