Java中++和—运算符的优先级

| 我从Java的官方教程中了解到前缀和后缀++-有不同的优先级:   后缀:expr ++ expr--      一元:++ expr --expr + expr -expr〜! 经营者 根据教程,这不应该
d = 1; System.out.println(d++ + ++d);
打印出6(
d++
使d 2,
++d
使3)而不是4? 我知道预先评估
++d
的解释,但是如果
d++
的优先级高于then2ѭ,为什么不首先评估
d++
?而且,在什么情况下ѭ1表示它具有更高的优先级? 编辑: 我尝试了以下方法:
d = 1; System.out.println(++d * d++);
它返回4。似乎应该是2 * 2,而不是1 * 3。     
已邀请:
        println语句的内部是此操作 (d ++)+(++ d) 如下所示,读取d的值(d = 1) d(1)的当前值放入加法函数 d的值增加(d = 2)。 然后,在右侧读取d的值(2) d的值增加(现在d = 3) 最后,将d(3)的值放入加法函数 因此1 + 3导致4 编辑:抱歉,该格式,我相当不擅长使用列表哈哈     
        关键是从操作返回的内容。 x ++更改x的值,但是 返回旧的x。 ++ x更改x的值,并返回新值。 d = 1 System.out.println(d ++ + ++ d); // d为1 System.out.println(1 + ++ d); // d为2 System.out.println(1 + 3); // d为3 版画4     
        不同的优先级并不意味着将首先评估。 这意味着表达式将以这种方式分组。 在这种情况下,ѭ9将被分组为
(d++) + (++d)
,并且此二进制表达式将按以下顺序求值: 左操作数
d++
。该子表达式由一个后缀增量运算符和一个变量组成,因此具有两个作用: 子表达式的值是
1
变量已更新:
d = 2
右操作数
++d
。该子表达式包含一个前缀增量运算符和一个变量,因此具有两个作用: 变量已更新:
d = 3
子表达式的值是
3
使用两个操作数的值评估运算符“ 17”。 因此,表达式值为1 + 3 = 4。
++
的前缀和后缀形式之间的不同优先级只能在
++d++
中看到,它将解释为
++(d++)
-这没有任何意义(
(++d)++
也没有人),因为
++
仅适用于变量,不适用于值(结果是一个值)。     
        这与优先级无关,而与评估顺序有关。
d++
等于to12ѭ,但but25ѭ递增。
++d
d
递增,然后求值为3。     
        请参阅此处为何忽略此Java运算符优先级? 归结为以下事实:首先对后缀运算符进行了评估,但按设计返回了变量的原始值。因此,出于您的操作目的:
(d++ + ++d)

Processes as:
1. d++ evaluates, returning the original value of 1 but incrementing d to 2
2. ++d evaluates, incrementing the value of 2 TO 3, and returning 3
3. +   evaluates, resulting in 1 + 3
混淆不是要评估令牌的优先顺序,您已经做到了。真正的问题在于了解后缀和前缀运算符之间的功能差异。     
        d的值为1 d ++被评估;它的值为1,而d现在为2(post ++在递增之前返回值) ++ d被评估;它的值为3,而d现在为3(++ pre递增后返回值) 1 + 3 = 4     
        System.out.println(d ++ + ++ d); 这是怎么回事: ++ d已执行,因此d现在为2。 d + d被执行,等于4。 值4被赋予System.out.println() d ++已执行,所以现在d为3。     
        我从头开始经历了所有的解释..据了解,下面的代码应该给出11.0,然后y给出10.0 双倍x = 4.5; x = x + ++ x; // x的值为10.0。     
        除了其他注释之外,我建议您看看序列点,因为其中一些东西可能导致不确定的行为,尽管我认为您的案例是为Java定义的。
x[i]=i++ + 1;
是做什么的? http://www.angelikalanger.com/Articles/VSJ/SequencePoints/SequencePoints.html     
这是一个常见错误。即使在oracle认证指南中,他们说Post增减运算符的优先级都比Pre运算符高。 我相信这是许多人已经存在一段时间的错误。经过几个表达式的实验。我相信我可以自信地说,前置和后置运算符具有相同的其他优先级,并且从左到右进行评估。 您可以通过评估以下示例进行实验以确认自己。
int y = 4;
int x = --y * 2 + 3 + y-- * 2;      // x is 15

int y = 4;
int x = --y * 2 + 3 + y++ * 2;      // x is 15
    

要回复问题请先登录注册