当前位置: 首页 > 面试题库 >

Java中的+ = a ++ * a ++ * a ++。如何评估?

谢誉
2023-03-14
问题内容

我在该网站上遇到了这个问题,并在Eclipse中进行了尝试,但无法理解如何对其进行精确评估。

    int x = 3, y = 7, z = 4;

    x += x++ * x++ * x++;  // gives x = 63
    System.out.println(x);

    y = y * y++;
    System.out.println(y); // gives y = 49

    z = z++ + z;
    System.out.println(z);  // gives z = 9

根据网站上的评论,x + = x * x * x ++解析为x = x +((x + 2)(x + 1)
x),这是事实。我想我缺少有关此运算符优先级的信息。


问题答案:

Java根据表达式的优先级从左到右计算表达式。

int x = 3, y = 7, z = 4;

x (3) += x++ (3) * x++ (4) * x++ (5);  // gives x = 63
System.out.println(x);

y = y (7) * y++ (7);
System.out.println(y); // gives y = 49

z = z++ (4) + z (5);
System.out.println(z);  // gives z = 9

后缀递增运算符仅在使用/返回变量后递增该变量。一切似乎都是正确的。

这是后缀增量运算符的伪代码:

int x = 5;
int temp = x;
x += 1;
return temp;

从JLS
15.14.2(参考):

后缀增量表达式的值是存储新值之前的变量值。



 类似资料:
  • 问题内容: 最近,我遇到了这段Java代码: 为“ a”打印的值为0。但是在C的情况下,“ a”的值为100。 我不明白为什么在Java情况下该值为0。 问题答案: a = a++; 从递增开始,然后返回到旧值,返回未递增的值。 简而言之,它在Java中什么也不做。如果要增加,请仅使用postfix运算符,如下所示:

  • 问题内容: 想要改善这篇文章吗? 提供此问题的详细答案,包括引文和答案正确的解释。答案不够详细的答案可能会被编辑或删除。 主持人注意: 请不要编辑代码或删除此声明。空格模式可能是问题的一部分,因此不应不必要地对其进行篡改。如果您处于“空白无关紧要”的阵营中,则应该能够原样接受代码。 有可能用JavaScript 评估吗? 这是一家大型科技公司提出的面试问题。它发生在两周前,但我仍在努力寻找答案。我

  • 问题内容: public void push(E element) { if (size == elements.length) { resize(); // doubel of size } elements[size++] = element; } Java中的a 和 a或a–和–a有什么区别 谢谢 问题答案: 或是后缀运算符,表示a的值将在对表达式求值后更改。 或是前缀运算,表示a的值将在对

  • 问题内容: A = 314 结果: 我知道在if语句中使用两个“ =”和“ is”是不正常的。但是我想知道Python解释器如何解释该语句。 表达式是同时解释还是短路解释? 问题答案: 您遇到的事情称为 运算符链接 。 从比较文档: 可以任意链接比较,例如 与等效,不同之处在于比较仅被评估一次(但是在两种情况下,如果发现错误,则根本不评估)。 强调我的。 因此,这意味着将被解释为,仅此而已。 更一

  • 问题内容: 今天,我发现了python语言一个有趣的“功能”,这让我感到非常悲伤。 那个怎么样?我以为两者是等同的!更糟糕的是,这是我调试时遇到的麻烦的代码 WTF!我的代码中包含列表和字典,并且想知道我到底怎么把dict的键附加到列表上而又没有调用.keys()。事实证明,这就是方法。 我认为这两个陈述是等效的。即使忽略这一点,我也可以理解将字符串追加到列表的方式(因为字符串只是字符数组),但是

  • 我尝试了一些代码在Java中交换两个整数,而不使用第三个变量,即使用XOR。 以下是我尝试的两个交换函数: 该代码产生的输出如下: 我很想知道,为什么会有这样的说法: 和这个不一样?