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. js十大排序算法

    排序算法说明: (1)对于评述算法优劣术语的说明 稳定:如果a原本在b前面,而a=b,排序之后a仍然在b的前面:不稳定:如果a原本在b的前面,而a=b,排序之后a可能会出现在b的后面: 内排序:所有排 ...

  2. 约定Jenkins构建脚本

    对于Jenkins的使用,我感觉只用到其中一小部分功能,但也就是这一小部分功能,也推动了整个CI/CD的过程,Jenkins的使用方式有很多中,可能我用到的只是其中一种,但是已经满足我的需求,便不再贪 ...

  3. 生产环境一键创建kafka集群

    前段时间公司的一个kafka集群出现了故障,由于之前准备不足,当时处理的比较慌乱.如:由于kafka的集群里topic数量较多,并且每个topic的分区数量和副本数量都不是一样的,如果按部就班的一个一 ...

  4. 用C语言做一个横板过关类型的控制台游戏

    前言:本教程是写给刚学会C语言基本语法不久的新生们. 因为在学习C语言途中,往往只能写控制台代码,而还能没接触到图形,也就基本碰不到游戏开发. 所以本教程希望可以给仍在学习C语言的新生们能提前感受到游 ...

  5. 也谈Reactor模式

    何谓Reactor模式?它是实现高性能IO的一种设计模式.网上资料有很多,有些写的也很好,但大多不知其所以然.这里博主按自己的思路简单介绍下,有不对的地方敬请指正. BIO Java1.4(2002年 ...

  6. Named Volume 在 MySQL 数据持久化上的基本应用

    原文作者:春哥 初识春哥时,春哥是美术设计大咖.后不久,创业并致力于游戏开发,已有3年.从Unity3D到IOS(Swift)开发,从前端开发到后端以及容器技术,从设计开发测试到产品经理以及CEO,已 ...

  7. Eclipse4JavaEE安装Gradle,并导入我们的Gradle项目

    第一步:下载Gradle Gradle下载链接,如下图,下载最新版本即可.下载下来的zip包,解压到一个目录即可,如F盘 第二步:配置环境变量 首先添加GRADLE_HOME,如下图 然后在Path下 ...

  8. Eclipse4JavaEE安装SpringBoot

    第一步:下载SpringBoot SpringBoot官网下载链接 第二步:在Eclipse里进行安装 打开Eclipse,菜单栏Help ->Install New Software,进入下图 ...

  9. 浅谈CSS3 box-sizing 属性 有趣的盒模型

    盒模型的组成大家肯定都懂,由里向外content,padding,border,margin. 盒模型是有两种标准的,一个是标准模型,一个是IE模型. 从上面两图不难看出在标准模型中,盒模型的宽高只是 ...

  10. Git原理与命令大全

    Git (wiki: en  chs )是一个免费开源的分布式版本控制系统,由linux内核作者linus Torvalds开发,大型开源项目linux kernel.Android.chromium ...