Java 为什么for循环中的递增/递减不以语句结束?

Java 为什么for循环中的递增/递减不以语句结束?,java,Java,在我用Java编写语句的其他地方,我都需要以分号结尾。但是,这不适用于for循环的i++ 这是怎么回事?因为它是一种特殊的语法,具有明确且一致的语义含义,可由编译器解释,因为C/C++/Java/等的设计者任意决定它应该如此 编辑: 一些评论人士指出,这个决定并不是真正的任意决定,因为设计师这样做是为了保持表达式与语句语法的一致性。我很高兴他们指出了这一点,因为我不知道是这样的。在我的辩护中,他们很明显可以让语法要求在那个位置使用分号;不这样做的决定虽然不是完全武断的,但代表了一种本可以有所不同

在我用Java编写语句的其他地方,我都需要以分号结尾。但是,这不适用于for循环的i++


这是怎么回事?

因为它是一种特殊的语法,具有明确且一致的语义含义,可由编译器解释,因为C/C++/Java/等的设计者任意决定它应该如此

编辑:


一些评论人士指出,这个决定并不是真正的任意决定,因为设计师这样做是为了保持表达式与语句语法的一致性。我很高兴他们指出了这一点,因为我不知道是这样的。在我的辩护中,他们很明显可以让语法要求在那个位置使用分号;不这样做的决定虽然不是完全武断的,但代表了一种本可以有所不同的选择。AHEM.< /P> < P>因为“’”很好地终止了更新语句,所以它是多余的。

< P> C和C++都是这样的,java复制了这些语言的大部分语法,使程序员从他们那里得到的东西变得更容易。
此外,实际上没有必要以“;”结束语句,因为右括号“)”界定语句的结束位置。

我将花一些时间学习表达式和语句之间的区别;如上所述

循环的
部分是表达式,而不是语句。表达式不以分号结尾
i++
是一个表达式。同样,在这里,在i++之后也不加分号:

System.out.println(i++;);
//                    ^ wrong

那没有任何意义。同样的逻辑也适用于
if
while
循环。

仔细想想,for循环中的三个术语中有两个不是真正的语句。以规范for循环为例

for(int ix = 0; ix < MAX; ix++){ /* do something */ }
for(intix=0;ix
那真是我的简写

int ix = 0;
while(ix < MAX){ /* do something */ ; ix++; }
intix=0;
而(ix

请注意,
ix
也没有分号。在for循环中,分号只是用来以某种方式分隔术语——只有通过共关联(并且没有额外的符号)才与语句终止符相同。

因为for循环的
i++
是一个表达式,不是语句。我相信
if
条件语句也可以包含结尾不带分号的语句:
if(found=set.contains(key))
No,因为它是表达式而不是语句
someFunc(i++)
基本上是一样的。@Andrey:之所以它是someFunc(i++),是因为它是一种特殊的语法,具有明确且一致的语义含义,可由编译器解释,因为C/C++/Java/等的设计者任意决定它应该是这样。更严重的是,我觉得我的答案并没有完全脱节,因为它同样适用于关于C/C++的问题。。。规范中有特定含义的词语<代码>表达式
语句
是其中的两个。我想安德烈想指出的是,这根本不是一个武断的决定。