java - 使用 -- 运算符传递参数时会发生什么?
问题描述
我在Java中遇到了以下代码:
public static void foo (int a, int b) {
System.out.println("a: " + a);
System.out.println("b: " + b);
}
public static void main(String[] args) {
int c = 1;
foo(c--, c);
System.out.println("c: " + c);
//The output is:
//a: 1
//b: 0
//c: 0
有人可以解释一下,为什么会这样?我会反过来猜到只有第一个打印语句会受到c--
. 但如果它确实永久改变了 c 的值,为什么第一行打印仍然打印 1?
解决方案
您可以使用++c
or递增c++
,类似地,您可以使用--c
or递减c--
对于++c
and --c
,您实际上是在告诉 Java “更改值,然后使用新值执行某些操作”
对于c++
and c--
,您是在告诉 java “加载值,然后更改它”。
现在,这就解释了为什么 A 是 1,C 是 0。但是为什么 B 也是 0?
调用函数时,参数按顺序解析。通常这仅在您将方法的直接结果作为参数传递时才相关。
例如,调用
methodX( methodY(), methodZ())
方法签名所在的位置
void methodX(int a, int b);
int methodY();
和int methodZ();
,则方法 Y 将在 Z 之前执行,Z 将在 X 之前执行。
推荐阅读
- c# - MongoDB C#将嵌入对象序列化为展平对象
- angular - 脏事件代替触摸事件触发
- typescript - SIP 和 TEL 链接在 Internet Explorer 中不起作用
- javascript - 如何验证动态创建的表的每一行?
- git - 如何从索引中删除一些文件并将其余文件推送到远程存储库?
- python - 获取当前登录的用户到评论表单
- android - 如何在 2019 年使用 Windows 10 从 CRT 创建 BKS 文件
- typescript - 初始化时如何在Vuex中动态设置初始状态(使用“if”)?
- python - 比较两个数据框列的匹配百分比
- google-cloud-platform - 如何在 Google Cloud 中的 Jupyter Notebook 服务上安装 Kaggle