1. 概述

自增操作符(++)和自减操作符(--)是对变量进行加1和减1的操作。

2.分类说明

++和--是对变量进行自增1和自减1的简写操作符。许多编程任务中经常需要对变量加1或者减1,所以采用这两个操作符会方便许多。例如,下面的代码是对i自增1,而对j自减1:

int i = 3, j = 3;
i++; // i become 4
j--; // j become 2

i++读为i加加,i--读为i减减。这些操作符分别称为后置自增操作符和后置自减操作符,因为操作符++和--放在变量后面。这些操作符也可以放在变量前面,比如:

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

下面演示前置形式的++(或者--)和后置形式的++(或者--)的补充示例。考虑以下代码:

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:

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。

下面是另一个例子:

double x = 1.0;
double y = 5.0;
double z = x-- + (++y);

在这三行程序执行完之后,y的值为6.0,z的值为7.0,而x的值为0.0。

Java中从左到右对操作数求值。在右边操作数的任何部分被求值之前,二元操作符左边的操作数先求值。这一规则的优先级高于表达式的任何其他规则。下面是一个例子:

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节内容,并由本人结合实例并补充扩展了一些实例代码,本文用于本人学习及经验总结。如需转载(非商业用途)请注明原作者(梁勇)及本文说明中涉及事项。

Java自增和自减操作符——++/--的那些事的更多相关文章

  1. 5.8 C++重载自增与自减操作符

    参考:http://www.weixueyuan.net/view/6386.html 注意: 自增“++”与自减“--”都是一元操作符,其前置和后置两种形式都可以被重载. 前置 stopwatch ...

  2. java 自增和自减运算符

    /** 自增和自减运算符: ++: 如果是++b,则表示先对变量b+1,再执行其他的操作: 如果是b++,则表示先执行表达式操作,再对变量自身+1 --: 用法和++相同 */ //Test.java ...

  3. Java 自增、自减

    i++/i-- 先使用变量的值,然后改变该变量的值: ++i/--i 先改变该变量的值,然后使用变量的值: : i = i++; 最终变量i的值到底是变成1呢还是保持为0呢? java中变量自增.自减 ...

  4. c++中自增(++)和自减(--)操作符

    自增(++)和自减(--)操作符为对象加1 或减1 操作提供了方便简短的实现方式.它们有前置和后置两种使用形式.到目前为止,我们已经使用过前自增操作,该操作使其操作数加1,操作结果是修改后的值.同理, ...

  5. C++ Primer 学习笔记_61_重载操作符与转换 --自增/自减操作符

    重载操作符与转换 --自增/自减操作符 引言: 自增,自减操作符常常由诸如迭代器这种类实现,这种类提供相似于指针的行为来訪问序列中的元素.比如,能够定义一个类,该类指向一个数组并为该数组中的元素提供訪 ...

  6. JAVA自增自减的玄机

    先看下面代码: ; i = i++; System.out.println(i); 请问:输出结果为多少? ---------------------------------------------- ...

  7. cc22a_demo_c++重载自增自减操作符-代码示范

    cc22a_demo_c++重载自增自减操作符-代码示范 #define _CRT_SECURE_NO_WARNINGS #include <iostream> using namespa ...

  8. 转:自增(自减)在Java与C中的区别

    转自:http://seiyatime.blog.sohu.com/84358295.html 话说昨日面试,在笔试的25个选择题中,涉及自增自减不止一两题,以前在开发过程中并没太在意这方面的问题,也 ...

  9. Java基础知识(一) 自增、自减运算符

    .d1 { border-style: none } .d2 { border-style: solid } .d3 { border-style: dotted } .d4 { border-sty ...

随机推荐

  1. Airtest 快速上手教程

    一.Airtest 简介: AirtestIDE 是一个跨平台的UI自动化测试编辑器,适用于游戏和App. 自动化脚本录制.一键回放.报告查看,轻而易举实现自动化测试流程 支持基于图像识别的 Airt ...

  2. Python爬虫入门教程 59-100 python爬虫高级技术之验证码篇5-极验证识别技术之二

    图片比对 昨天的博客已经将图片存储到了本地,今天要做的第一件事情,就是需要在两张图片中进行比对,将图片缺口定位出来 缺口图片 完整图片 计算缺口坐标 对比两张图片的所有RBG像素点,得到不一样像素点的 ...

  3. DES加解密

    package encrypt; import java.security.Key; import java.security.SecureRandom; import java.util.Base6 ...

  4. [Leetcode]643. Maximum Average Subarray I

    Given an array consisting of n integers, find the contiguous subarray of given length k that has the ...

  5. 学习 JavaScript(二)在 HTML 中使用 JS

    基本用法 在 HTML 中使用 <script> 元素引入 Javascript , <script> 有以下 4 个常用属性: async: 异步加载,只对外部脚步有效. d ...

  6. [开源]MasterChief 快速开发辅助类库

    C# 开发辅助类库,和士官长一样身经百战且越战越勇的战争机器,能力无人能出其右. GitHub:MasterChief 欢迎Star,欢迎Issues: 项目架构思维导图: 目录 1. 数据库访问 2 ...

  7. 一文助您成为Java.Net双平台高手

    写在前面:本文乃标题党,不是月经贴,侧重于Web开发差异,或细节或概述,若有不对之处,还请各位读者本着友好互助的心态批评指正.由于博客园中.Neter较多(个人感觉),因此本文也可以作为.Neter到 ...

  8. 自定义GridLookUpEdit编辑器

    本文版权归博主  惊梦无痕  所有,欢迎转载,但须保留此段声明,并给出原文链接,谢谢合作.SourceLink 前两天分享了GridControl的自定义编辑器,今天再来分享一下整理出来的GridLo ...

  9. ArcPy 批量给shp字段赋值

    工作中需要做大量图层的拼接,为了在拼接完成后还能知道原始数据文件是什么,所以写了个Python脚本对每个图层的SOURCE字段进行赋值. 附上Python代码: # -*- coding: utf-8 ...

  10. Android使用google breakpad捕获分析native cash

    Android 开发高手课 课后练习(1) 一.Chapter01 崩溃 https://time.geekbang.org/column/article/70602 https://github.c ...