gpt4 book ai didi

java - 不同的间距如何影响一元运算符?

转载 作者:IT老高 更新时间:2023-10-28 21:14:11 26 4
gpt4 key购买 nike

谁能解释一下不同的间距如何影响一元运算符?

int i = 1;
int j = i+ + +i; // this will print j=2
int k = i++ +i; // this will print k=3
int l = i+++i; // this will print l=3
int m = i++++i; // compile time error

.

最佳答案

首先,让我们把它分成三个不能交互的不同情况:

int i = 1;
System.out.println(i+ + +i); // 2

int j = 1;
System.out.println(j++ +j); // 3

int k = 1;
System.out.println(k+++k); // 3

现在让我们用括号重写它们:

int i = 1;
System.out.println(i + (+(+i)));

int j = 1;
System.out.println((j++) + j);

int k = 1;
System.out.println((k++) + k);

第一次操作

这里我们不能使用前缀或后缀++ 运算符,因为我们在任何地方都没有 ++ 标记。相反,我们有一个二元 + 运算符和两个一元 + 运算符。

第二次操作

这个很简单:就像它读起来的那样,一个后缀++ 运算符后跟一个二元 + 运算符(不是 +j 可能暗示的一元 + 运算符)。

第三次操作

最后一行被解析为 (k++) + k 而不是 k + (++k)。在 this 情况下,两者实际上都会给出相同的答案,但我们可以通过使用两个不同的变量来证明哪个是哪个:

int k1 = 1;
int k2 = 1;
System.out.println(k1+++k2); // Prints 2
System.out.println(k1); // Prints 2
System.out.println(k2); // Prints 1

如您所见,递增的是 k1 而不是 k2

k+++k被解析为k+++的记号的原因, k 是由于 section 3.2 of the JLS ,其中包括:

The longest possible translation is used at each step, even if the result does not ultimately make a correct program while another lexical translation would.

第四次操作(编译失败)

同样的“最长可能翻译”规则将 i++++i 解析为 i, ++ ,++ , i 这不是一个有效的表达式(因为 ++ 操作的结果是一个值,而不是一个变量)。

关于java - 不同的间距如何影响一元运算符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22009916/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com