基本介绍

自增(++)和自减(--)运算符是对变量在原始值的基础上进行加1或减1的操作。

它们都有前缀和后缀两种形式。

前缀就是++在前面,后缀就是++在后面

前缀先自增(减),后缀后自增(减)

前缀形式的运算规则可以概括为:“先自增(减),后引用”,如 ++a

后缀形式的运算规则可以概括为:“先引用,后自增(减)”,如 a++。

这里所说的“引用”,指的是使用变量的值,将值放入操作栈的动作。

另外,我们还要强调一个细节:无论是前缀形式还是后缀形式,自增自减运算符的优先级要 > 赋值运算符。

一、仅有++或--

 1 public class Test1 {
2
3 public static void main(String[] args) {
4 int a=2;
5 a++;
6 System.out.println(a);//输出3
7 int b=2;
8 ++b;
9 System.out.println(b);//输出3
10 }
11 }

可以看到,当仅做++或--时,不管是后缀式a++,还是前缀式++b,输出的结果都是一样的。因为仅自身++或--,并不会有“引用”,也就是不会有操作栈的动作。

二、++或--运算结果赋值给其他变量

 1 public class Test1 {
2
3 public static void main(String[] args) {
4 int a=2;
5 int b=a++;
6 System.out.println(a);//输出3
7 System.out.println(b);//输出2
8 int c=2;
9 int d=++c;
10 System.out.println(c);//输出3
11 System.out.println(d);//输出3
12 }
13 }

当有赋值或加减等操作时,就会用到操作栈。

a=2  b=a++ 是后缀式,“先引用,后自增(减)”

第①步:先把a的值2,放入操作栈

第②步:a再自增变成3

第③步:将操作栈里的值2赋值给b

c=2  d=++c 是前缀式,“先自增(减),后引用”

第①步:c先自增变成3

第②步:再把c的值3,放入操作栈

第③步:将操作栈里的值3赋值给b

再来看下运算后再赋值的

1 public class Test1 {
2
3 public static void main(String[] args) {
4 int a=2;
5 int b=++a + ++a;
6 System.out.println(a);//输出4
7 System.out.println(b);//输出7
8 }
9 }

++a 是前缀式,“先自增(减),后引用”

第①步:a先自增变成3

第②步:再把a的值3,放入操作栈1

第③步:a再自增变成4

第④步:再把a的值4,放入操作栈2

第⑤步:把操作栈1中的数据3和操作栈2中的数据4相加,赋值给b

1 public class Test1 {
2
3 public static void main(String[] args) {
4 int a=2;
5 int b=++a + a++;
6 System.out.println(a);//输出4
7 System.out.println(b);//输出6
8 }
9 }

和上面相比,a++ 是后缀式,“先引用,后自增(减)”

就是上面第③步和第④步互换,先将a的值3放入操作栈2,所以输出的是3+3=6。

三、++或--运算结果赋值给自身

 1 public class Test1 {
2
3 public static void main(String[] args) {
4 int a=2;
5 a=++a;
6 System.out.println(a);//输出3
7 int b=2;
8 b=b++;
9 System.out.println(b);//输出2
10 }
11 }

++a 是前缀式,“先自增(减),后引用”,所以是先自增为3,再把3放入操作栈,最后把操作栈中的3赋值给a。

b++ 是后缀式,“先引用,后自增(减)”,所以是先将b的值2放入操作栈,再自增为3,最后把操作栈中的2赋值给b。

再看个复合赋值运算+=

当语句中以复合赋值运算符给变量赋值的时候,计算机会先把复合赋值运算符左边变量的值存入操作数栈。

1 public class Test1 {
2
3 public static void main(String[] args) {
4 int a=2;
5 a+=++a + ++a;
6 System.out.println(a);//输出9
7 }
8 }

前面已经讲到,++a + ++a的值为7,计算机先把a的值2放入操作栈1,再把右边的计算结果存入操作数栈2,最后把操作数栈1和操作数栈2中的数值相加,赋值给a,所以是2+7=9。

学透java自增(++)自减(--)运算符的更多相关文章

  1. java自增(自减)运算符

    自增(自减)运算符: ++ --就是可以将当前变量自我增加(减少)1 的运算符. i++, 后++, 先将 i 的值作为整个表达的值, 然后将 i 增加 1. ++i, 先++, 先将 i 增加 ...

  2. Java自增自减运算符

    3.1自增自减运算符 注意事项: ++和--既可以放在变量的后边,也可以放在变量的前边 单独实用的时候,++和--无论是放在变量的前边还是后边,结果是一样的 参与操作的时候,如果放在变量的后边,先拿变 ...

  3. java入门---运算符&算术运算符&自增自减运算符&关系运算符&位运算符

        计算机的最基本用途之一就是执行数学运算,作为一门计算机语言,Java也提供了一套丰富的运算符来操纵变量.我们可以把运算符分成以下几组: 算术运算符 关系运算符 位运算符 逻辑运算符 赋值运算符 ...

  4. 023 01 Android 零基础入门 01 Java基础语法 03 Java运算符 03 算术运算符之——自增自减运算符

    023 01 Android 零基础入门 01 Java基础语法 03 Java运算符 03 算术运算符之--自增自减运算符 本文知识点:Java算术运算符中的自增自减运算符 自增自减运算符 之前我们 ...

  5. 【java从入门到精通】day-06-基本运算符-自增自减运算符

    1.运算符 java语言支持如下运算符: 算术运算符:+,-,*,/,%,++,-- 赋值运算符:= 关系运算符:>,<,>=,<=,==,!=,instanceof 逻辑运算 ...

  6. 2-1赋值运算符 & 2-2自增自减运算符 &2-3

    2-1赋值运算符 先定义一个变量,把定义好的变量在赋值给另外一个变量.变向之间的互相赋值 2-2自增自减运算符 元素符,放在变量前和变量后的区别 先进行自增运算,再进行赋值运算.这里先进行num1的+ ...

  7. 【转】 C语言自增自减运算符深入剖析

    转自:http://bbs.csdn.net/topics/330189207 C语言的自增++,自减--运算符对于初学者来说一直都是个难题,甚至很多老手也会产生困惑,最近我在网上看到一个问题:#in ...

  8. C语言系列之自增自减运算符的用法(二)

    运算符中最难理解的有自增自减运算符的使用方法,下面我将简单总结一下他们的使用方法 我们知道,C语言运行是由右向左运行的 下面我们来看一个例子 当i等于3的时候 j=++i; 由上面可知,C语言是由右向 ...

  9. c语言:自增自减运算符的操作详解

    博主在回忆c语言的基本知识时,突然发现自增自减运算符(--.++)这个知识点有些模糊不清,故博主为了给同为小白的同学们提供一些经验,特写下这篇文章. 首先,自增自减运算符共有两种操作方式. 比如,我先 ...

  10. JAVA中自增自减运算符(i++与++i的区别)

    注意: 自增运算符和自减运算符只能用于变量,而不能用于常亮或表达式 运算符 运算 范例 结果 ++ 自增(前):先运算后取值 a=2;b=++a; a=3;b=3; ++ 自增(后):先取值后运算 a ...

随机推荐

  1. windows下flutter的环境安装

    Flutter是谷歌出品的移动应用SDK,性能卓越.体验精美.跨平台.HotReload等等这些特点. Dart是谷歌推出的编程语言.支持即时编译JIT(Just In Time).HotReload ...

  2. 简化车辆登记流程:利用腾讯云OCR实现自动化信息识别

      项目中有一块,需要用到上传车牌车牌号到系统里,用了下腾讯云的ocr车牌号识别做了个小功能.通过腾讯云的orc识别,将车牌号录入到后台. 一,首先我们需要登录到腾讯云,然后搜索一下orc或者车牌号 ...

  3. 「codeforces - 687D」Dividing Kingdom II

    link. 好题啊. 首先有一个类 kruskal 暴力,就是对于每一个询问,把所有边按权值大小排降序,第一个加进去成为奇环的边就是答案.注意我们不需要关注偶环长成什么样子,所以我们实际上维护的是一棵 ...

  4. Springboot简单功能示例-5 使用JWT进行授权认证

    springboot-sample 介绍 springboot简单示例 跳转到发行版 查看发行版说明 软件架构(当前发行版使用) springboot hutool-all 非常好的常用java工具库 ...

  5. 痞子衡嵌入式:MCUBootUtility v5.3发布,利用XMCD轻松使能外部RAM

    -- 痞子衡维护的 NXP-MCUBootUtility 工具距离上一个大版本(v5.0.0)发布过去4个多月了,期间痞子衡也做过三个小版本更新,但不足以单独介绍.这一次痞子衡为大家带来了全新重要版本 ...

  6. 教育法学第八章单元测试MOOC

    第八章单元测试 返回 本次得分为:100.00/100.00, 本次测试的提交时间为:2020-09-06, 如果你认为本次测试成绩不理想,你可以选择 再做一次 . 1 单选(5分) 社团法人与财团法 ...

  7. 记Halo1.5版本迁移Halo2.10.0版本

    原文地址: 记Halo1.5版本迁移Halo2.10.0版本 - Stars-One的杂货小窝 上一篇Window10安装linux子系统及子系统安装1Panel面板 - Stars-One的杂货小窝 ...

  8. YbtOJ 做题记录-总集版

    感觉每章都开一篇博客过于占据版面 (以及写不动题了想摸一会鱼 于是就有了您现在看到的这篇博客. upd:不知道啥时候咕了.懒得补,那就继续咕着吧(bushi 基础算法 第1章 递推算法 第2章 贪心算 ...

  9. 合并果子(lgP1090)

    贪心. 每次取最小的两堆合并,最后即为正确答案.(我也不会证明/wq) 所以说主要问题就是怎么找最小的两堆. 由于中间不断有插入和删除,所以用优先队列. 扯不下去了 直接看代码吧. #include& ...

  10. Python 潮流周刊#25:性能最快的代码格式化工具 Ruff!

    你好,我是猫哥.这里每周分享优质的 Python.AI 及通用技术内容,大部分为英文.标题取自其中一则分享,不代表全部内容都是该主题,特此声明. 本周刊由 Python猫 出品,精心筛选国内外的 25 ...