【问题标题】:Does promotion occur before increment in Java?Java中的提升是否发生在增量之前?
【发布时间】:2017-08-03 10:50:01
【问题描述】:

我在 OCA 问题中看到了这个问题,需要知道为什么它输出 90 而不是 100。 代码如下:

int x = 9;
long y = x * (long) (++x);
System.out.println(y);

所以,我认为这会做的是,首先,增加 x(因为这就是一开始会发生的事情吗?)然后它会进行类型提升并取左 x 为 10,将其变成 long 并将它们相乘两个多头。对吧?

【问题讨论】:

  • @Guy,他说它打印了什么,他想知道它为什么打印它的作用。
  • 我知道打印的是什么,但需要一个答案。
  • 我不确定转换为 long 对这种情况有什么影响。 int y = x * (++x) 得到同样的结果
  • @khelwood 下一个问题可能是“如果 x = Integer.MAX_VALUE 怎么办?”。但这只是我的猜测。
  • 好像和类型提升没什么关系。

标签: java pre-increment type-promotion


【解决方案1】:

没有。每个运算符的操作数从左到右计算。因此* 运算符的第一个操作数x 在第二个操作数(long) (++x) 之前计算。因此 9 乘以 10。

【讨论】:

  • 优先级与评估顺序不匹配的示例。 +1
  • @Eran,所以基本上,如果 Java 在操作中看到变量 - 它会尝试获取其值并写入操作,对吗?从左到右。好的。我现在知道了。谢谢先生。
猜你喜欢
  • 2011-09-08
  • 2021-04-26
  • 1970-01-01
  • 2019-01-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-12
  • 2017-07-06
相关资源
最近更新 更多