【发布时间】:2014-08-16 19:42:08
【问题描述】:
我有以下代码:
public class Book {
private static int sample1(int i) {
return i++;
}
private static int sample2(int j) {
return ++j;
}
public static void main(String[] arguments){
int i = 0;
int j = 0;
System.out.println(sample1(i++)); //0
System.out.println(sample1(++i)); //1
System.out.println(sample2(j++));//1
System.out.println(sample2(++j));//2
System.out.println(i);//2
System.out.println(j);//2
}
}
我的预期输出是 cmets。实际输出如下:
0
2
1
3
2
2
我对函数调用和 incemental 运算符感到困惑。有人可以解释一下实际结果吗?
【问题讨论】:
-
你一遍又一遍地增加同一个变量。每次要增加时都需要将其重置为零。
-
你知道Java是按值传递的,所以sample1实际上只是
return i;,而sample2是return j + 1,对吧?嗬!错字已修复。谢谢@ElliottFrisch -
@DavidEhrmann 你的意思是pass-by-value?
-
一个是前置的,一个是后置的。这有帮助吗?
-
@ChrisTarazi 我知道我一遍又一遍地增加同一个变量。我只是想解释一下这些值是如何逐步增加的。