Java 为什么结果不是1?
打印到Java 为什么结果不是1?,java,Java,打印到0 但是我认为m将被后加,最后是1。 请有人解释一下 注意:我知道增量后的工作原理(至少我认为我知道:p)。但我想弄明白的是,当我说m+=m++时,让我们假设它的意思是m=m+m++,它将在发送m的值后计算m++,在这种情况下,0,然后计算到m=0+0,然后由于后增量,增加m的值。现在,如果发生了后期增量,为什么m不是1m++返回m,然后将其增量 将其更改为++m,您将看到1 为了清楚起见,这个问题也解释了它:m++返回m,然后递增它 将其更改为++m,您将看到1 为了清楚起见,这个问题也
0
但是我认为m
将被后加,最后是1
。
请有人解释一下
注意:我知道增量后的工作原理(至少我认为我知道:p)。但我想弄明白的是,当我说
m+=m++
时,让我们假设它的意思是m=m+m++
,它将在发送m
的值后计算m++
,在这种情况下,0
,然后计算到m=0+0
,然后由于后增量,增加m
的值。现在,如果发生了后期增量,为什么m
不是1
m++
返回m
,然后将其增量
将其更改为++m
,您将看到1
为了清楚起见,这个问题也解释了它:
m++
返回m
,然后递增它
将其更改为++m
,您将看到1
为了清楚起见,这个问题也解释了这一点:嗯,m++在增加它之前返回m的值,与++m相反,增量然后返回,如:
int m = 0;
m += m++;
System.out.println(m);
m++在增加之前返回m的值,与+m相反,增加后返回,如:
int m = 0;
m += m++;
System.out.println(m);
此时m为0
int m = 0
扩展到m=m+(m++)
m
返回0
int m = 0
m++
返回m的值,即0
,然后将其递增到1
将m+(m++)
转换为0+0
(此时m是1
a)
然后将其分配给m
,得到m
的最终值
提示:否则,在触摸该值时,请避免后增量
此时m为0
int m = 0
扩展到m=m+(m++)
m
返回0
int m = 0
m++
返回m的值,即0
,然后将其递增到1
将m+(m++)
转换为0+0
(此时m是1
a)
然后将其分配给m
,得到m
的最终值
提示:在触摸该值时避免后增量,否则请考虑以下规则:
相当于a+=b
。因此a=a+b
相当于m+=m++
m=m+m++
您可以看到,在右视野中第一次出现的
在增量之前进行评估,并生成m
0
int m = 0
m++
递增m
并返回递增前m
的原始值。因此,在您的例子中,
m++
将m
设置为1
并返回0
int m = 0
- 对右侧的求值产生
并将0
设置为m
1
- 赋值将
设置为右侧的值(m
)0
相当于a+=b
。因此a=a+b
相当于m+=m++
m=m+m++
您可以看到,在右视野中第一次出现的
在增量之前进行评估,并生成m
0
- 考虑以下规则:
int m = 0
m++
递增m
并返回递增前m
的原始值。因此,在您的例子中,
m++
将m
设置为1
并返回0
int m = 0
- 对右侧的求值产生
并将0
设置为m
1
- 赋值将
设置为右侧的值(m
)0
m += m++;
如果执行m=++m,则顺序为:
事件的顺序是:
m += m++;
如果执行m=++m,则顺序为:
f
是您的代码g
是一个扩展版本,显示了它们都打印0
的原因
tmp = m;
m++;
m = tmp;
f
是您的代码g
是一个扩展版本,显示了它们都打印0
的原因
tmp = m;
m++;
m = tmp;
在代码中
m++=m++代码>结果-->>M值+(后增量M值(M++))
最初
m值=0
在代码中,后增量(m++)m值=0(前增量(+m)=1)
m++=m++代码>结果-->>M值+(后增量M值(M++))
最初
m值=0
递增后(m++)m值=0(递增前(++m)=1)回答:作业在执行作业之前评估副作用
class Test {
private static void f() {
int x = 0;
x += x++;
System.out.println(x);
}
private static void g() {
int x = 0;
int preInc = x; // preInc = 0
x += 1; // x = 1
x = preInc; // x = 0
System.out.println(x);
}
public static void main(String[] args) {
f();
g();
}
}
相当于
m += m++;
回答:作业在执行作业之前评估副作用
class Test {
private static void f() {
int x = 0;
x += x++;
System.out.println(x);
}
private static void g() {
int x = 0;
int preInc = x; // preInc = 0
x += 1; // x = 1
x = preInc; // x = 0
System.out.println(x);
}
public static void main(String[] args) {
f();
g();
}
}
相当于
m += m++;
OP表示打印到0
@蒂科吉