我有以下代码:
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
}
}
我的预期输出是注释。实际输出如下:
0
2
1
3
2
2
我对函数调用和输入运算符感到困惑。有人能好心解释一下实际结果吗?
首先,您需要知道x++
和++x
之间的区别;
在x++
:
首先将使用当前值,然后将其递增。这意味着您将获得x
的当前值,如果您下次使用x,将获得增量值;
在++X
的情况下:
首先,当前值将被递增,接下来将被使用(递增值),这意味着您将在此操作中获得递增值,在此操作之后获得其他值。
现在让我们拆分代码并分别讨论它们
方法:sample1():
private static int sample1(int i) {
return i++;
}
这个方法将首先返回一个int,然后尝试递增,但是在返回变量i
之后,它将超出范围,因此它将永远不会被递增。Exp In:10->out 10
方法:样本2():
private static int sample2(int j) {
return ++j;
}
这个方法将取一个int并首先递增它,然后返回它。输入输出:10->输出11
在这两种情况下,只有变量会在本地发生变化,这意味着如果从main方法调用,main方法的变量不会受到变化的影响(因为sample1()和sample2()正在复制变量)
现在介绍main方法的代码
System.out.println(sample1(i++)); // it's giving sample1() `i=0` then making `i=1`
// so sample1() will return 0 too;
System.out.println(sample1(++i)); // it's making `i=2` and then giving sample1() `i=2`
// so sample1() will return 2;
System.out.println(sample2(j++)); // it's giving sample2() `j=0` then making `j=1`
// so sample2() will return 1;
System.out.println(sample2(++j)); // it's making `j=2` giving sample2() `j=2` then
// so sample2() will return 3;
问题内容: 我有以下代码: 我的预期输出在注释中。实际输出如下: 我对函数调用和增量运算符感到困惑。有人可以解释一下实际结果吗? 问题答案: 首先你需要知道的区别和; 如果是: 首先,将使用当前值,然后将其递增。这意味着您将获得操作的当前值,并且如果您下次使用x将获得递增的值; 如果是: 首先,当前值将增加,然后将使用它(增加的值),这意味着您将在此操作中获得增加的值,而在此操作之后将获得其他值。
问题内容: 我不明白为什么这个职位增加方程不增加。我以为在+=操作之后,该值将增加1,然后围绕i的第二次将具有1值。但是输出是一个零零的无限循环。有谁能解释为什么“ i”不增加。 问题答案: @ njzk2的答案是正确的,但指出正确的 原因 很有用。 还有其他可能性-例如,为什么Java在分配后不执行postincrement运算符?(答案:因为那不是Java语言设计者选择的) Java语言规范第
问题内容: 我对post 和pre 运算符感到困惑,例如以下代码 会打印10吗? 它打印10,但我希望它应该打印11 但是当我这样做 它会按照我的预期输出11,所以为什么x = x ++; 不会改变x的值? 问题答案: 否,正确的打印输出为10。理解结果背后原因的关键是预分配和后分配复合分配之间的差异。当使用预增量时,表达式的值在执行增量后获取。但是,当您使用后递增时,表达式的值 在 递增 之前
问题内容: 哪个更正确?Java的结果为12或C =13。或者,如果不是正确性,请详细说明。 问题答案: 没有比这更正确的了。它实际上是未定义的,称为序列点错误。 http://en.wikipedia.org/wiki/Sequence_point
问题内容: 当我运行以下示例时,我得到输出0,2,1 我不明白为什么输出是0,2,1而不是0,2,2 问题答案: 意思是现在。调用打印,但返回0,所以和 在此之前,现在想象被调用并替换为0 所以 现在它将是 用简单的话(从这里 @ Piotr) “ i = i ++”大致翻译为 另一个这样的例子: 同样的基本原理
问题内容: 如何理解java中的 i 和i ? 问题答案: a 先自增,然后使用变量。 a 先使用,然后自增。 如果你有 然后 现在是 2