基本介绍

自增(++)和自减(--)运算符是对变量在原始值的基础上进行加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. 保护个人数据安全,使用luks加密硬盘分区

    create:2023-01-24 17:44:44 准备工作 新硬盘4T,无数据.在root用户或sudo状态下执行. 首先创建分区表,由于mbr最大支持只有2T,因此分区表创建为gpt格式. 然后 ...

  2. vscod 配置 morkdown 快捷键

    vscod 配置 morkdown 快捷键 1.首先在根目录添加.vscode 文件夹 ️1.1 新建一个 settings.json 文件 { "[markdown]": { & ...

  3. 月工资不到10元的内容审核专员? - ChatGPT 在内容自动审查中的应用

    内容过滤筛查是指对网络上发布或传播的文本.图片.视频等内容进行审核和监管,以防止出现违法违规.暴力色情.虚假广告.电信诈骗等现象,维护网络安全和社会秩序. 内容过滤筛查是一个亟待解决的问题,因为网络内 ...

  4. Vue-进阶:路由及elementUI组合开发

    Vue-router路由 什么是vue-router? 服务端路由指的是服务器根据用户访问的 URL 路径返回不同的响应结果.当我们在一个传统的服务端渲染的 web 应用中点击一个链接时,浏览器会从服 ...

  5. JDK、JRE、JVM三者介绍

    概念 JDK: Java Development Kit,java开发者工具. JRE: Java Runtime Enviroment,java运行时环境. JVM: Java Virtual Ma ...

  6. 手撕Vue-查找指令和模板

    接着上一篇文章,我们已经实现了提取元素到内存的过程,接下来我们要实现的是查找指令和模板. 大致的思路是这样的: 遍历所有的节点 需要判断当前遍历到的节点是一个元素还是一个文本 如果是一个元素, 我们需 ...

  7. iframe用的场景

    iframe可用在以下几个场景中: 1:典型系统结构,左侧是功能树,右侧就是一些常见的table或者表单之类的.为了每一个功能,单独分离出来,采用iframe. 2:ajax上传文件. 3:加载别的网 ...

  8. Telegram 正式引入国产小程序技术

    Telegram 宣布为其开发者提供了一项"能够在 App 中运行迷你应用"的新功能( 迷你应用即 Mini App,下文中以"小程序"代替). 在一篇博客文章 ...

  9. MySQL锁:InnoDB行锁需要避免的坑

    前言 换了工作之后,接近半年没有发博客了(一直加班),emmmm.....今天好不容易有时间,记录下工作中遇到的一些问题,接下来应该重拾知识点了.因为新公司工作中MySQL库经常出现查询慢,锁等待,节 ...

  10. 广度优先搜索— —提高Ⅲ(BFS优化)

    双向广搜 所谓双向广搜,就是初始结点向目标结点和目标结点向初始结点同时扩展,直至在两个扩展方向上出现同一个结点,搜索结束.它适用的问题是,扩展结点较多,而目标结点又处在深沉,如果采用单纯的广搜解题,搜 ...