Java 对同一件事得到不同的结果 公共类主{ 公共静态void main(字符串[]args){ int x=20,y=35; x=y+++x++; y=++y+++x; System.out.printf(“%d%d\n”,x,y); } //产出:56,93 #包括 void main() { int x=20,y=35; x=y+++x++; y=++y+++x; printf(“%d%d”,x,y); } //产出:57 94

Java 对同一件事得到不同的结果 公共类主{ 公共静态void main(字符串[]args){ int x=20,y=35; x=y+++x++; y=++y+++x; System.out.printf(“%d%d\n”,x,y); } //产出:56,93 #包括 void main() { int x=20,y=35; x=y+++x++; y=++y+++x; printf(“%d%d”,x,y); } //产出:57 94,java,c,operators,operator-precedence,Java,C,Operators,Operator Precedence,根据运算符优先级规则,我通过Java代码得到的任何输出都是正确的,但在“C”代码中执行相同的输出时,输出值增加了1。我使用的是ubuntu 12.04 64位操作系统。这不是一回事,因为Java和C是不同的语言 Java中增量后的行为定义为在表达式求值后执行增量 C中的行为未定义,但通常遵循优先顺序 注意:求值顺序和优先顺序是不同的,这对于递增/递减后的布尔运算和快捷布尔运算更为明显 e、 g 在这种情况下,!具有最高的优先级,但实际上永远不会被计算,因为较低的优先级|会阻止它 优先级仅确定隐含

根据运算符优先级规则,我通过Java代码得到的任何输出都是正确的,但在“C”代码中执行相同的输出时,输出值增加了1。我使用的是ubuntu 12.04 64位操作系统。

这不是一回事,因为Java和C是不同的语言

Java中增量后的行为定义为在表达式求值后执行增量

C中的行为未定义,但通常遵循优先顺序

注意:求值顺序和优先顺序是不同的,这对于递增/递减后的布尔运算和快捷布尔运算更为明显

e、 g

在这种情况下,
具有最高的优先级,但实际上永远不会被计算,因为较低的优先级
|
会阻止它


优先级仅确定隐含括号的位置,但仅建议表达式的计算方式。

这在C和C++中是未定义的行为。C代码不是有效的C代码。C中的
main
是否应返回int?@PeterLawrey“在C中,main可以是void或int”这不是我的C99标准副本在第5.1.2.2.1:1条中所说的。什么条款告诉你
main()
可以返回
void
?@PeterLawrey编译的和标准/非标准的
main()
之间可能有区别,根据c标准,应该返回类型
int
public class main {

public static void main(String[] args) {
  int x=20,y=35;       
  x = y++ + x++;
  y = ++y + ++x;
  System.out.printf("%d %d\n",x,y);
}
//Output : 56,93

#include<stdio.h>
void main()
{
  int x=20,y=35;       
  x = y++ + x++;
  y = ++y + ++x;
  printf("%d %d ",x,y);
}
//Output : 57 94
Sting s = null;

if (s == null || !(s.length() > 0))