Salesforce中深入认识Apex中的i++、++i语句

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/itsme_web/article/details/81866168

前言】:在几乎所有的命令式编程语言中,必然都会有i++和++i这种语法。在编程启蒙教材《C语言程序设计》一书中,也专门解释了这两条语句的区别。有些语言中i++和++i既可以作为左值又可以作为右值,笔者专门测试了一下,Apex语言中,这两条语句都只能作为右值,而不能作为左值。同时,它们都可以作为独立的一条指令执行。

Integer i = 0;
Integer j1 = i++; // 正确
Integer j2 = ++i; // 正确
i++; // 正确
++i; // 正确

i++ = 5; // 编译不通过 - Expression cannot be assigned
++i = 5; // 编译不通过 - Expression cannot be assigned

Code实例】:关于i++和++i的区别,稍微有经验的程序员都或多或少都是了解的,为了文章的完整性,本文也通过实例来简单地解释一下。

/**********- Sample1 -**********/
Integer i = 0;
Integer j1 = ++i;
Integer j2 = i++;
System.debug(i);// 输出2
System.debug(j1 + '----' + j2);// 输出1---1

/**********- Sample2 -**********/
Integer i = 1;
Integer j1 = i++;
System.debug(j1);// 输出1
System.debug(i);// 输出2

/**********- Sample3 -**********/
Integer i = 1;
Integer j2 = ++i;
System.debug(j2);// 输出2
System.debug(i);// 输出2

通过综合分析,我们大致能提炼出以下口诀

1. 无论是i++和++i指令,对于i变量本身来说是没有任何区别,指令执行的结果都是i变量的值加1;
2. 对于Sample1的j1,先将i变量值加1,然后将i的当前值(1)赋给变量j1(1);对于Sample1的j2,先将i的原始值(1)赋给变量j2(1),然后i变的量值加1;

我们通过对比Java相关参考文献:深入理解Java中的i++、++i语句,发现Java和Apex还是有部分差异的,看如下实例:

/********** -Sample4- **********/
Integer i = 0;
i = i++;
System.debug(i); // 输出0 

/********** -Sample5- **********/
Integer i = 0;
i = ++i;
System.debug(i); // 输出1

对比】:
在Apex中Sample4,5在IDE不会抛出任何异常,但是
在Java中Sample4的i = i++的导致的结果“异常”;Sample5 IDE抛出:【The assignment to variable i has no effect】警告。
但是不论在Apex还是Java中最终都会输出同样的结果,总而言之我们可以把上边的口诀进一步提炼如下

1. 不论i++,++i在没有使用自身变量i接收(无i=i++/i=++i)的情况下,i的最终值都是累加;
2. 在i++,++i使用了变量接收的情况下(可以是自身变量接收,也可以是其他变量接收),接收的值对于i++,遵循先赋值i,后i自增;对于++i,将+后的值赋给接收变量。

口诀验证】:

猜你喜欢

转载自blog.csdn.net/itsme_web/article/details/81866168