【问题标题】:How does a=a++ work in java [duplicate]a = a ++在java中如何工作[重复]
【发布时间】:2013-05-01 17:27:57
【问题描述】:

最近我偶然发现了这段Java代码:

int a=0;
for(int i=0;i<100;i++)
{
    a=a++;
}
System.out.println(a);

'a' 的打印值为 0。但在 C 的情况下,'a' 的值为 100。

我无法理解为什么 Java 的值为 0。

【问题讨论】:

  • “但是在 C 的情况下” - 嗯?哦,C 语言.. 我很确定你需要一个序列点才能工作
  • 不,在 C 中这是未定义的行为。
  • 序列点在 Java 中定义良好.. 所以你一直在重新分配 0.. 很酷
  • 在 C 中也是 0,不是吗。

标签: java


【解决方案1】:
a = a++;

从递增a 开始,然后将a 恢复为旧值,因为a++ 返回未递增的值。

简而言之,它在 Java 中什么也不做。如果要递增,请仅使用后缀运算符,如下所示:

a++;

【讨论】:

  • 已经有争议的答案
  • 是的,哈哈,不错。
  • 当,快速的反对票和赞成票:D
  • 我第一次看到答案转到 7,然后是 4,然后又是 7。
【解决方案2】:

a++ 是一个后自增,因此 a 被赋值为 a(始终为 0),a 的 ghost 变量随后自增,与真正的 a 没有区别,也不保存结果。 结果,a 总是被赋值为 0,因此代码什么也不做

【讨论】:

    【解决方案3】:

    因为:

    a = a++;///will assign 'a' to 'a' then increment 'a' in the next step , but from the first step 'a' is '0' and so on
    

    要获得 100,您可以这样做:

    a = ++a;////here the 'a' will be increment first then will assign this value to a so a will increment in every step 
    

    a++;////here the increment is the only operation will do here 
    

    【讨论】:

      猜你喜欢
      • 2015-09-15
      • 2018-02-22
      • 2021-09-27
      • 2015-02-09
      • 2019-11-23
      • 2014-12-05
      • 2017-12-24
      • 2018-11-20
      • 1970-01-01
      相关资源
      最近更新 更多