Java表达式中的后增量和预增量
每个表达式的计算结果是什么?假设x在每一个之前是2Java表达式中的后增量和预增量,java,expression,variable-assignment,increment,Java,Expression,Variable Assignment,Increment,每个表达式的计算结果是什么?假设x在每一个之前是2 int num=x++*3 这等于(2)*3或num=6,x现在是3 num*=x num=2*2或4 (x1) 变为FALSE,因为(21)=true所以它是FALSE (++x
int num=x++*3代码>
这等于(2)*3或num=6,x现在是3num*=x代码>
num=2*2或4(x<2)和&(x>1)
变为FALSE,因为(21)=true所以它是FALSE(++x<2)|(x<1)
(3在“break”是之前递增。基本上这是java做的第一件事(实际上括号仍然是第一件事)。因此在(++x<2)|(++x<3)如果不正确,第二个++x出现在第一个++x之后。是的,这些是一些非常基本的概念,请帮自己一个忙。下载unittest框架,就像jUnit一样。然后,您可以通过一些断言快速运行所有这些测试,这些断言将准确地显示正在发生的事情。另一种不用太多开销的方法是在控制台上打印出来
int num = x++ * 3; System.out.println( "num=" + num ); // num=6
=>OK:x=3,num=6int num=x++*3;
=>num的初始值是多少?如果num=2,那么您也可以。num*=x;
在x=2时为假,正常(x<2)和&(x>1)
在x=2时为false,也可以(++x<2)| |(x<1)
我记得我看过openJDK,特别是javac源代码中的
类,++x被翻译成x+=1,因此您可以将其看作:Lower
这是(没有类型转换):((x+=1))<2)
。第二个测试将具有较新的x值,即3,因为java从左到右计算条件((x=(x+1))<2)
我不知道你从哪里弄来的num *= x; num =2*2 or 4
相当于num*=x
num=num*x代码>。如果num是6(来自上一条语句),那么它现在将是12(假设x仍然是2)
- “假设
在每一个前面是2。”这是一个给定的假设还是你正在做的假设?我不相信你能做出这样的假设。我相信你已经按顺序评估了所有这些陈述x
a*=b的展开形式是什么
- 在第二条语句中,
的初始值是多少num
- 在上一条语句中,您正确地(假设初始条件正确)计算了
在每次陈述后跟踪
,因为(2+1)<1
已递增x
和x
的值,我想你会得到正确的答案num
祝你好运 你说的是哪一个“休息”?第四个。由于预增量在第一个括号中(我确信它有一个特殊的名称),它会影响第二个括号中x的值比较吗?就像如果在AND或or语句的前半部分中x的值是预/后增量的,它会影响后半部分的值吗?为什么不自己尝试一下?-->这个问题可能会有所帮助:。我意识到在执行语句之前,它会在前半部分的x值上加一。让我试着用另一种方式来解释这一点:varx=2代码>
(x++<4)和&(x==2)代码>
第二条语句是真是假。我想知道预增量是否会影响整行的x值。@Chris:为什么不直接运行它?如果结果为
,则第二条语句为false
。如果为false
,则为true
。这很容易找到。@Felix Kling:我对安装Eclipse或SDK的计算机没有管理员权限。尽管有人在网上发布了我现在正在使用的这个很酷的java runner。我以前从来没有这样做过,那么你怎么能返回OR语句的值而不写一个大的if-else呢?@fbernardo如果程序给我这个错误:“无法从结果类型为void的方法返回值”,这意味着该语句是false,对吗?或者这是否意味着某些东西实际上是错的?如果您声明了一个void方法(比如main),您就不能返回值。这就是void方法,一个不返回任何内容的方法。。。所以,这并不意味着它是对的或错的。在这种情况下,x在第一次求和后变成3,所以num将是18。这就是她给我的。我想她假设所有的程序都是独立的,x值初始化为2。我没有安装Eclipse或SDK的管理员权限。尽管有人在网上发布了我现在正在使用的这个很酷的java runner。true
- “假设