java中的序列点概念

java中的序列点概念,java,Java,我是Java新手,有C语言背景。我正在阅读Khalid Moughal的书。 在第126页,他举了一个例子 int i = 10; int k = ++i + --i; // ((++i) + (--i)). 这显然违反了C中的序列点概念,即不能在同一序列点中多次更改变量的值。 我的问题是相同的序列点规则是否适用于java? 也许他举这个例子只是为了解释前缀一元运算符的概念及其副作用,但在著名的Khalid Moughal一书中,这种明显违反语言基本规则的例子是不可能出现的 所以

我是Java新手,有C语言背景。我正在阅读Khalid Moughal的书。 在第126页,他举了一个例子

   int i = 10;

   int k = ++i + --i; // ((++i) + (--i)).
这显然违反了C中的序列点概念,即不能在同一序列点中多次更改变量的值。 我的问题是相同的序列点规则是否适用于java? 也许他举这个例子只是为了解释前缀一元运算符的概念及其副作用,但在著名的Khalid Moughal一书中,这种明显违反语言基本规则的例子是不可能出现的

所以请确认一下

希望你们这些人能以正确的精神对待它

谢谢

马维亚

我的问题是相同的序列点规则是否适用于java

不,Java中没有序列点。评估顺序(etc)在Java中有很好的定义


另请阅读答案。

否,java中没有顺序点的概念,顺序已完全定义。一般来说,表达式是从左到右求值的。有关形式定义,您可以阅读JLS第15.7节关于求值顺序的内容。
参见链接。

C有很多包袱,因为在编写标准之前,已有几十个编译器和数百万个程序,所以他们必须以一种不会破坏依赖于特定编译器优化方式的程序的方式来制定标准。而且,优化非常原始,这解释了
register
关键字,它允许程序员执行微优化,任何一个优秀的编译器都可以做得更好。尽管顺序定义得很好,但应该注意的是,任何教写这样代码的人都应该被当场吊销许可证……我在这里是因为一个更实际的例子。我想知道在Java中执行以下操作是否安全<代码>目标[i]=源[i++]