自增(++)和自减(--)运算符
在java语言中存在着很多运算符,但是在实际开发中我们或许很少用到它们,在初次学习中却时常出现它们的身影,对于这些运算符的含义和用法,是否还记得呢?
1. 概述
自增操作符(++)和自减操作符(--)是对变量进行加1和减1的操作。
2.分类说明
++和--是对变量进行自增1和自减1的简写操作符。许多编程任务中经常需要对变量加1或者减1,所以采用这两个操作符会方便许多。例如,下面的代码是对i自增1,而对j自减1:
1
2
3
|
int i = 3 , j = 3 ; i++; // i become 4 j--; // j become 2 |
i++读为i加加,i--读为i减减。这些操作符分别称为后置自增操作符和后置自减操作符,因为操作符++和--放在变量后面。这些操作符也可以放在变量前面,比如:
1
2
3
|
int i = 3 , j = 3 ; ++i; // i becomes 4 --j; // j becomes 2 |
--i将i增加1,--j将j减去1。这些操作符称为前置自增操作符和前置自减操作符。
如你所见,前面的例子中,i++和++i的效果,或者i--和--i的效果是一样的。然而,当用在表达式中不单纯只进行自增和自减时,他们就会产生不同的效果。具体如下表,描述了自增和自减操作符的不同之处,并且给出了示例:
操作符 |
名称 |
描述 |
示例(假设i=1) |
++var |
前置自增 |
将var加1,在语句中使用新的var值 |
int j = ++i; // j is 2, i is 2 |
var++ |
后置自增 |
将var加1,但是在语句中使用原来的var值 |
int j = i++; // j is 1, i is 2 |
--var |
前置自减 |
将var减1,在语句中使用新的var值 |
int j = --i; // j is 0, i is 0 |
var-- |
后置自减 |
将var减1,但是在语句中使用原来的var值 |
int j = i--; // j is 1, i is 0 |
下面演示前置形式的++(或者--)和后置形式的++(或者--)的补充示例。考虑以下代码:
1
2
3
4
|
int i = 10 ; int newnum = 10 * i++; //左边等价于---》 int newnum = 10 * i; system.out.print( "i is " + i //接上条 i = i + 1; + ", newnum is " + newnum); |
执行输出:
i is 11, newnum is 100
上述中i自增1,然后返回i原来的值来参与乘法运算。这样,newnum的值就为100。如果如下所示将i++换为++i:
1
2
3
4
|
int i = 10 ; int newnum = 10 * (++i); //左边等价于---》 i = i + 1; system.out.print( "i is " + i //接上条 int newnum = 10 * i; + ", newnum is " + newnum); |
执行输出:
i is 11, newnum is 110
上述中 i自增1,然后返回i的新值,并参与乘法运算。这样,newnum的值就为110。
下面是另一个例子:
1
2
3
|
double x = 1.0 ; double y = 5.0 ; double z = x-- + (++y); |
在这三行程序执行完之后,y的值为6.0,z的值为7.0,而x的值为0.0。
java中从左到右对操作数求值。在右边操作数的任何部分被求值之前,二元操作符左边的操作数先求值。这一规则的优先级高于表达式的任何其他规则。下面是一个例子:
1
2
3
4
5
6
7
8
|
int i = 1 ; int k = ++i + i * 3 ; // 分析可知: ++i求值后返回2。当求i*3的值时,i是2。因此k的值是8。 //------------对比以下代码------------------ int i = 1 ; int k = i* 3 + ++i ; // 分析可知:从左往右,当求i*3的值时,i是1,后算++i,++i整体是2。因此k的值是5。 |
3.总结
自增在平时的java笔试和面试中经常作为考查程序员的基础题多次出现,也是比较容易混淆的知识点。在平时编程中使用自增操作符和自减操作符可以使表达式更加简短,但也会使他们比较复杂且难以读懂。应该避免在同一个表达式中使用这些操作符修改多个变量或多次修改同一个变量,如int k = ++i + i * 3。
4.说明
本文摘自《java语言程序设计与数据结构》(基础篇)第11版第2章2.14节内容,并由本人结合实例并补充扩展了一些实例代码,本文用于本人学习及经验总结。
好了,以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对服务器之家的支持。
原文链接:https://www.cnblogs.com/yif0118/p/10425013.html