学透java自增(++)自减(--)运算符
基本介绍
自增(++)和自减(--)运算符是对变量在原始值的基础上进行加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自增(++)自减(--)运算符的更多相关文章
- java自增(自减)运算符
自增(自减)运算符: ++ --就是可以将当前变量自我增加(减少)1 的运算符. i++, 后++, 先将 i 的值作为整个表达的值, 然后将 i 增加 1. ++i, 先++, 先将 i 增加 ...
- Java自增自减运算符
3.1自增自减运算符 注意事项: ++和--既可以放在变量的后边,也可以放在变量的前边 单独实用的时候,++和--无论是放在变量的前边还是后边,结果是一样的 参与操作的时候,如果放在变量的后边,先拿变 ...
- java入门---运算符&算术运算符&自增自减运算符&关系运算符&位运算符
计算机的最基本用途之一就是执行数学运算,作为一门计算机语言,Java也提供了一套丰富的运算符来操纵变量.我们可以把运算符分成以下几组: 算术运算符 关系运算符 位运算符 逻辑运算符 赋值运算符 ...
- 023 01 Android 零基础入门 01 Java基础语法 03 Java运算符 03 算术运算符之——自增自减运算符
023 01 Android 零基础入门 01 Java基础语法 03 Java运算符 03 算术运算符之--自增自减运算符 本文知识点:Java算术运算符中的自增自减运算符 自增自减运算符 之前我们 ...
- 【java从入门到精通】day-06-基本运算符-自增自减运算符
1.运算符 java语言支持如下运算符: 算术运算符:+,-,*,/,%,++,-- 赋值运算符:= 关系运算符:>,<,>=,<=,==,!=,instanceof 逻辑运算 ...
- 2-1赋值运算符 & 2-2自增自减运算符 &2-3
2-1赋值运算符 先定义一个变量,把定义好的变量在赋值给另外一个变量.变向之间的互相赋值 2-2自增自减运算符 元素符,放在变量前和变量后的区别 先进行自增运算,再进行赋值运算.这里先进行num1的+ ...
- 【转】 C语言自增自减运算符深入剖析
转自:http://bbs.csdn.net/topics/330189207 C语言的自增++,自减--运算符对于初学者来说一直都是个难题,甚至很多老手也会产生困惑,最近我在网上看到一个问题:#in ...
- C语言系列之自增自减运算符的用法(二)
运算符中最难理解的有自增自减运算符的使用方法,下面我将简单总结一下他们的使用方法 我们知道,C语言运行是由右向左运行的 下面我们来看一个例子 当i等于3的时候 j=++i; 由上面可知,C语言是由右向 ...
- c语言:自增自减运算符的操作详解
博主在回忆c语言的基本知识时,突然发现自增自减运算符(--.++)这个知识点有些模糊不清,故博主为了给同为小白的同学们提供一些经验,特写下这篇文章. 首先,自增自减运算符共有两种操作方式. 比如,我先 ...
- JAVA中自增自减运算符(i++与++i的区别)
注意: 自增运算符和自减运算符只能用于变量,而不能用于常亮或表达式 运算符 运算 范例 结果 ++ 自增(前):先运算后取值 a=2;b=++a; a=3;b=3; ++ 自增(后):先取值后运算 a ...
随机推荐
- 云上的甜蜜早安:腾讯云云函数助力PHP打造女友专属每日推送
用腾讯云的云函数做一个微信公众号早安,每天定时发送早安给你的女朋友! 1.首先我们登录腾讯云,在搜索栏搜索云函数,或直接用这个链接进入curl.qcloud.com/Td0IkpmD 2.进入云函数, ...
- MindSpore简要性能分析
技术背景 在之前的一篇博客中,我们介绍过MindInsight的安装与使用.不过在前面的文章中,我们主要介绍的是MindInsight与SummaryCollector的配合使用,更多的是用于对结果进 ...
- 2023-09-23:用go语言,假设每一次获得随机数的时候,这个数字大于100的概率是P。 尝试N次,其中大于100的次数在A次~B次之间的概率是多少? 0 < P < 1, P是double类型,
2023-09-23:用go语言,假设每一次获得随机数的时候,这个数字大于100的概率是P. 尝试N次,其中大于100的次数在A次~B次之间的概率是多少? 0 < P < 1, P是dou ...
- Angular2 通过自定义指令限制输入框输入类型
** 温馨提示:如需转载本文,请注明内容出处.** 本文链接:https://www.cnblogs.com/grom/p/16814577.html 在input控件中,使用type="n ...
- Newstar CTF 2023
WEEK1 PWN 1.ezshellcode 直接sendline(shellcode)即可 exp: from pwn import * p = remote("node4.buuoj. ...
- Linux 本地部署私有Stackedit Markdown编辑器远程访问
StackEdit是一个受欢迎的Markdown编辑器,在GitHub上拥有20.7k Star!,它支持将Markdown笔记保存到多个仓库,包括Gitee.GitHub和Gitea.此在线笔记工具 ...
- slice简介
简介 Go语言中的切片(slice)是一种灵活的数据结构,它构建在数组之上并提供了方便的方式来操作数组的一部分.切片的底层实现涉及到数组和一些元数据.以下是Golang切片的底层实现的详细介绍: 底层 ...
- CF1766B [Notepad#]
Problem 题目简述 给你一个整数 \(n\) 和字符串 \(s\),问:能不能在小于 \(n\) 次操作的情况下,输出字符串 \(s\). 有两次操作可供使用: 在已打出内容的最后添加一个字符. ...
- 相邻像素相关性的matlab实现
目录 加密性能分析(一)相邻像素相关性的matlab实现 相邻像素相关性 (一)概念 (二)相邻像素的相关系数 (三)相邻像素分布图 加密性能分析(一)相邻像素相关性的matlab实现 相邻像素相关性 ...
- OpenGL 着色器详解
1. GLSL语言 glsl语言是用来编写着色器的,通过一段一段包含main函数的程序片段,告诉渲染引擎怎么去渲染内容. glsl语言的语法有点类似c语言风格,只是增加了一些特有的关键字来修饰变量,下 ...