Java表达式中的增量和预增量

时间:2012-03-01 01:40:43

标签: java expression variable-assignment increment

  

每个表达式评估的内容是什么?假设x在每个之前是2。

  • int num = x++ * 3;
    所以这相当于(2)* 3或num = 6而x现在是3.

  • num *= x;
    num = 2 * 2或4

  • (x < 2) && (x > 1)
    变为FALSE,因为(2 <2)= false而且(2&gt; 1)= true所以它是假的。

  • (++x < 2) || (x < 1)
    (3<2)是假的,然后((2+1)<1)也是假的,所以它是假的? 在这种情况下,一个问题是,在断裂之前将预增量应用于变量吗?第二个x值应该是3还是2? 我对后增量也有同样的问题。假设我有num=x++ *x++,其中初始x = 2。这是2 * 2还是2 * 3?

5 个答案:

答案 0 :(得分:1)

它在“休息”之前递增。基本上它是java做的第一件事(括号实际上仍然是第一个)。所以在(++ x&lt; 2)||中(++ x&lt; 3)第二个++ x发生在第一个之后,如果不是真的话。

答案 1 :(得分:1)

int num = x++ * 3; =&gt; OK:x = 3,num = 6
num *= x; =&gt; num的初始值是多少?如果num = 2,那么你也没关系。
当x = 2时,(x < 2) && (x > 1)为假,OK 当x = 2时,(++x < 2) || (x < 1)为假,OK

我记得我看过openJDK,尤其是javac源代码中的Lower类,++ x被翻译成x + = 1因此你可以看作: ((x += 1)) < 2)这是(无类型转换):((x = (x + 1)) < 2)。第二个测试将具有较新的x值,即3,因为java从左到右评估条件。

答案 2 :(得分:0)

是的,这些是一些非常基本的概念,帮自己一个忙。下载像jUnit这样的单元测试框架。然后,您可以使用一些断言快速运行所有这些测试,这些断言将准确显示正在发生的事情。另一种没有太多开销的方法就是在控制台上打印出来。

int num = x++ * 3;
System.out.println( "num=" + num );  // num=6

答案 3 :(得分:0)

num *= x;
num =2*2 or 4

我不知道你在哪里。

num *= x;相当于num = num * x;。如果num是6(来自前一个语句)那么现在它将是12(假设x仍然是2)。

答案 4 :(得分:0)

  1. “假设x在每个之前是2。”这是一个给定的假设还是你正在做的假设?我不相信你能做出这样的假设。我相信你已按顺序评估所有这些陈述。
  2. a *= b的扩展形式是什么?
  3. 当你在第二个声明时,num的初始值是多少?
  4. 在您上次发表的声明中(假设您的初始条件正确无误)计算(2+1) < 1,因为x已递增。
  5. 在每次发言后跟踪xnum的值,我想你会得到正确答案。

    祝你好运!