我在测试中三次错过了这个问题。我似乎无法掌握如何解决这个问题。非常感谢任何帮助。
public class Test {
public static void main(String[] args) {
int j = 0;
int i = ++j + j * 5;
System.out.println("What is i? " + i);
}
}
答案 0 :(得分:3)
有关:
int i = ++j + j * 5;
变量j使用表达式++j
按1递增,等于j + 1,将j的值更改为1.然后遵循java中的操作顺序规则,在此阶段,乘法执行(j * 5)
或(1 * 5)
,因此当前i = 5.最后,乘法j的乘积加(j + 5)
或(1 + 5)
= 6。
您可以通过以下简单方式查看此页面:
答案 1 :(得分:1)
根据Java的运算符优先级和评估顺序,i
等于6
。 i
设置为j
,预先递增为1
,并添加到自身的产品和5
,即6。
答案 2 :(得分:0)
此处需要注意的是j++
和++j
之间的区别。请参阅:The difference between ++Var and Var++
记住这一点,++j
将返回1,并将j的值更改为1.因此下一部分j*5
等于1 * 5,即5。所以整体{{1给你6。
答案 3 :(得分:0)
Java有一个operator precedence规则,这意味着Java中包含运算符,后缀(j ++)和前缀(++ j)的任何数学表达式都会被首先评估。还有left and right associativity这就是你的语句被解析的方式。数学运算符如+, - ,/,*具有从左到右的相关性。后缀和前缀具有从右到左的关联性。
查看Java Grammar File,发现
前缀增量表达式的值是。的值 存储新值后的变量
因此,当前语句的++ j为1。
后缀增量表达式的值是。的值 存储新值之前的变量。
因此,当前语句的j ++为0。
因此,前缀评估后的(++ j)+ j * 5变为(1 +(1 * 5))= 6.
<强> [编辑] 强>
因此,诸如j ++ + j * 5之类的语句将给出5作为答案,因为j在j ++之后变为1(后缀增量)但j ++本身仍为0。
答案 4 :(得分:0)
如果++ j出现在语句中,则j的值首先递增,然后执行该语句。但是如果j ++出现在语句中,则执行第一个语句然后递增值。
要简单地解决执行部分,您可以忽略++符号并简化它。但是不要忘记增量和简化的顺序。
答案 5 :(得分:0)
根据java运算符优先级,++
运算符的优先级高于+
和*
运算符。这是一步一步发生的事情:
首先++j
发生。由于j
为0,++j
会将j
增加为1。
现在表达式++j + 5 * j
已成为1 + 5 * 1
。
现在我们有两个运营商+
和*
。首先应用哪一个?请参阅运算符优先级图表,您会发现*
的优先级高于+
。首先,5 * 1
首先发生。乘法后,表达式看起来像1 + 5
。
将1
添加到5
,我们得到6
。所以.... i = 6
就是结果。
如果您想了解更多有关++运算符的信息,那么youtube上会有一些不错的视频。