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. javascript模块化编程 从入门到实战

    <!DOCTYPE html> <html lang="zh-cn"> <head> <meta charset="UTF-8& ...

  2. 深入理解Linux内核 学习笔记(5)

    第五章  定时测量 内核必须显式地与三种时钟打交道:实时时钟(Real Time Clock, RTC).时间标记计数器(Time Stamp Counter, TSC)及可编程间隔定时器( Prog ...

  3. 卷积神经网络之AlexNet

    由于受到计算机性能的影响,虽然LeNet在图像分类中取得了较好的成绩,但是并没有引起很多的关注. 知道2012年,Alex等人提出的AlexNet网络在ImageNet大赛上以远超第二名的成绩夺冠,卷 ...

  4. Eureka服务配置与进阶

    1. Eureka服务配置与进阶 1.1. 主要配置 1.1.1. 服务端(eureka.server.*) enableSelfPreservation默认true,启用注册中心的自保护机制,Eur ...

  5. jqgrid three 树形结构

    最近我们的表格中,需要更改数据的显示方式,就是jqgrid中以树形的方式显示.请先看图: 就是简单的这种从属方式.但是因为这个没有找到官方的文档(后来找到了,但是发现是翻译过来的,也不是很清楚),所以 ...

  6. Flex很难?一文就足够了

    Flexible Box 是什么   布局的传统解决方案,基于盒状模型,依赖 display 属性 + position属性 + float属性.它对于那些特殊布局非常不方便,比如,垂直居中就不容易实 ...

  7. Angular(03)-- lint风格规范和WebStorm小技巧

    在开始讲 Angular 各个核心知识点之前,想先来讲讲开发工具 WebStorm 的一些配置以及相应配置文件如 tslint.json 的配置. 因为我个人比较注重代码规范.代码风格,而对于这些规范 ...

  8. openlayers4 入门开发系列之地图属性查询篇(附源码下载)

    前言 openlayers4 官网的 api 文档介绍地址 openlayers4 api,里面详细的介绍 openlayers4 各个类的介绍,还有就是在线例子:openlayers4 官网在线例子 ...

  9. mssql sqlserver 给已存在表添加新的字段及字段备注的方法

    转自:http://www.maomao365.com/?p=8102 摘要: 下文讲述向已存在表上添加新字段及字段备注的方法,如下所示: 实验环境:sql server 2008 R2 1. 添加新 ...

  10. ioremap_nocache() 函数的使用【转】

    本篇文章主要是在ioremap_nocache函数说明的基础上进行整理,加入该函数的用法简介. 函数原型 void __iomem * ioremap_nocache (unsigned long o ...