每个表达式评估的内容是什么?假设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?
答案 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)
x
在每个之前是2。”这是一个给定的假设还是你正在做的假设?我不相信你能做出这样的假设。我相信你已按顺序评估所有这些陈述。a *= b
的扩展形式是什么?num
的初始值是多少?(2+1) < 1
,因为x
已递增。在每次发言后跟踪x
和num
的值,我想你会得到正确答案。