在几乎所有的命令式编程语言中,必然都会有i++和++i这种语法。在编程启蒙教材《C语言程序设计》一书中,也专门解释了这两条语句的区别。有些语言中i++和++i既可以作为左值又可以作为右值,笔者专门测试了一下,在Java
语言中,这两条语句都只能作为右值,而不能作为左值。同时,它们都可以作为独立的一条指令执行。
int i = 0;
int j1 = i++; // 正确
int j2 = ++i; // 正确
i++; // 正确
++i; // 正确
i++ = 5; // 编译不通过
++i = 5; // 编译不通过
关于i++和++i的区别,稍微有经验的程序员都或多或少都是了解的,为了文章的完整性,本文也通过实例来简单地解释一下。
{
int i = 1;
int j1 = i++;
System.out.println("j1=" + j1); // 输出 j1=1
System.out.println("i=" + i); // 输出 i=2
}
{
int i = 1;
int j2 = ++i;
System.out.println("j2=" + j2); // 输出 j2=2
System.out.println("i=" + i); // 输出 i=2
}
上面的例子中可以看到,无论是i++和++i指令,对于i
变量本身来说是没有任何区别,指令执行的结果都是i变量的值加1。而对于j1和j2来说,这就是区别所在。
int i = 1;
int j1 = i++; // 先将i的原始值(1)赋值给变量j1(1),然后i变量的值加1
int j1 = ++i; // 先将i变量的值加1,然后将i的当前值(2)赋值给变量j1(2)