【问题标题】:Why does variable i not change after i=i++?为什么变量 i 在 i=i++ 后不变?
【发布时间】:2021-09-26 02:56:17
【问题描述】:

LinkedIn 的 Java 评估测试中的以下问题我不明白:

for(int k =0; k<10; k=k++) {
   k+=1;
   System.out.println("Hello world.");
}

为什么这段代码会打印 10 次“Hello world.”?

我知道 k++ 的意思是,首先做作业(计算、分配等),然后增加 k。所以我认为对于 k=k++,k 必须在赋值后递增:

k=k;
k=k+1; 

最后,我希望得到 k=k+1。

例如下面的代码打印 j=0 和 j=1:

int j=0;
System.out.println("j=" + j++);
System.out.println("j=" + j);

亲爱的java专家,你能解释一下为什么k=k++不会改变k吗?

【问题讨论】:

  • a=a++ 有 2 个步骤:1. 评估,2. 分配。 ++ 部分发生在评估期间,然后被赋值覆盖
  • 使用你的调试器!!!!单步执行代码。在每一步查看每个变量的值。我想你会看到很多你可能“没想到”的事情;)例如,k=+1 将分配值“+1”;)
  • 简短建议:仅在独立表达式中使用++。例如,只做i++;,从不做i = i++;
  • 奥普斯。对不起我的错。 k+=1;而不是 k=+1;。我编辑了。

标签: java increment post-increment


【解决方案1】:

为什么这段代码会打印 10 次“Hello world.”?

不,这将是一个无限循环,因为以下语句将 k 的值重置为 1:

k=+1;

此外,k=k++ 不会更改 k 的值,因为它被处理为类似

int temp = k;
k++;
k = temp;

您可以尝试以下代码来验证这一点:

int k = 1;
k = k++;
System.out.println(k); // Will print 1

【讨论】:

  • 但是你能解释一下为什么k=k++不会改变k的值吗?
  • @LorisFoe - 我已经更新了我的答案来解释这一点。谢谢。
  • @Arvind,对不起,我的错是 k+=1;
  • @Kuvalya - 不用担心。在这种情况下,k+=1; 将导致k 的值在每次迭代中增加。我希望,关于k = k++; 的解释对你来说很清楚。每当我有足够的时间时,我也会根据您问题的更新来更新答案。如有任何疑问,请随时发表评论。
【解决方案2】:

应该是k+=1

for(int k =0; k<10; k=k++) {
   k+=1;
   System.out.println("Hello world.");
}

如果你想得到 k=0 => k=2

  for(int k =0; k<10; k=k+2) {
       System.out.println("Hello world.");
    }

【讨论】:

  • 请解释清楚你想要什么
猜你喜欢
  • 2022-07-13
  • 2011-10-06
  • 1970-01-01
  • 1970-01-01
  • 2012-08-25
  • 2023-03-17
  • 1970-01-01
  • 2019-04-26
相关资源
最近更新 更多