ITEEDU

入门准备

接触对象

对象导向

资源管理

对象容器(Container)

输入输出(I/O)

执行绪(Thread)

反射(Reflection)

metadata

数据库(JDBC)

舍遗补缺

Java Gossip: 递 增、递减运算

递增、递减与指定运算子,老实说常成为初学者的一个恶梦,因为有些程序中若写得精简,这几个运算子容易让初学者搞不清楚程序的真正运算结果是什么;事实 上,使用这几种运算子的目的除了使让程序看来比较简洁之外,还可以稍微增加一些程序执行的效率。

在程序中对变量递增1或递减1是很常见的运算,例如:

int i = 0; 
i = i + 1; 
System.out.println(i); 
i = i - 1; 
System.out.println(i);

这段程序会分别显示出1与0两个数,您可以这么写这个程序:

int i = 0; 
System.out.println(++i); 
System.out.println(--i); 

其中写在变量 i 之前的++与--就是「递 增运算子」(Increment operator)与「递减运算子」(Decrement operator),当它们撰写在变量之前时,其作用就相当于将变量递增1与递减1:

++i;// i = i + 1; 
--i;// i = i - 1;

您可以将递增或递减运算子撰写在变量之前或变量之后,但其实两者是有差别的,将递增(递减)运算子撰写在变量前时,表示先将变量的值加(减)1,然后再传 回变量的值,将递增(递减)运算子撰写在变量之后,表示先传回变量值,然后再对变量加(减)1,例如:

int i = 0; 
int number = 0; 
number = ++i;// 相当于i = i + 1; number = i; 
System.out.println(number); 
number = --i;// 相当于i = i - 1; number = i; 
System.out.println(number);

在这段程序中,number的值会前后分别显示为1与0,再看看下面这段:

int i = 0; 
int number = 0; 
number = i++;// 相当于number = i; i = i + 1; 
System.out.println(number); 
number = i--;// 相当于 number = i; i = i - 1; 
System.out.println(number); 

在这段程序中,number的值会显示前后分别为0与1。

接下来看「指定运算子」(Assignment operator), 到目前为止只看过一个指定运算子,也就是(=)这个运算子,事实上指定运算子还有以下的几个:

运 算子

范 例

结 果

+=

a += b

a = a + b

-=

a -= b

a = a - b

*=

a *= b

a = a * b

/=

a /= b

a = a / b

%=

a %= b

a = a % b

&=

a &= b

a = a & b

|=

a |= b

a = a | b

^=

a ^= b

a = a ^ b

<<=

a <<= b

a = a << b

>>=

a >>= b

a = a >> b

每个指定运算子的作用如上所示,但老实说若不是常写程序的老手,当遇到这些指定运算子时,有时可能会楞一下,因为不常用的话,这些语法并不是那么的直觉。

使用++、--或指定运算子,由于程序可以直接在变量的内存空间中运算,而不用取出变量值、运算再将数值存回变量的内存空间,所以可以增加运算的效 率,但以现在计算机的运算速度来看,这一点的效率可能有些微不足道,除非您这类的运算相当的频繁,否则是看不出这点效率所带来的改善,就现在程序撰写的规模 来看,程序的易懂易读有时反而是重点,可以的话尽量将程序写的详细一些会比较好,千万不要为了卖弄语法而滥用这些运算子。

就单一个陈述而言,使用++、--或指定运算子是还算可以理解,但与其它陈述结合时可就得考虑一下,例如:

int i = 5; 
arr[--i %= 10] = 10; 

像这样的式子,要想知道 i 是多少,以及数组的指定索引位置在哪可就得想一下了(有兴趣算一下的话,i会是4,而数组的指定索引也是4),总之,如何使用与何时使用,自己得拿捏着点