学透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 ...
随机推荐
- numpy 索引,切片 ,转置,变值,多个数组的拼接
- MPI转以太网模块连接300PLC与DCS modbus通信
MPI转以太网模块连接300PLC与DCS modbus通信 由300PLC通过MPI转以太网Plus模块作为modbus从站与DCS主站通信实现MPI转RTU与DCS通信 打开兴达易控提供的MPI转 ...
- pip install numpy -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install numpy -i https://pypi.tuna.tsinghua.edu.cn/simpleLooking in indexes: https://pypi.tuna.t ...
- Arduino基础入门之三按键开关
目的:通过读取按键开关的信号,实现其他器件的控制 难点:下拉电阻和上拉电阻 一.关于按键开关 按键开关如上图[1]所示,但我拿到实物,最令我头疼的是按钮下边4个角,我不知那两边是相通的(就是和图中12 ...
- 11g编译bbed
报错如下: make -f ins_rdbms.mk $ORACLE_HOME/rdbms/lib/bbed Linking BBED utility (bbed) rm -f /u01/app/or ...
- C#学习笔记---异常捕获和变量
异常捕获 使用异常捕获可以捕获出现异常的代码块,防止因为异常抛出造成的程序卡死的情况发生. try{}catch{}finally{}结构 //异常捕获 try { string str=Consol ...
- 【译】为什么命名“它”为依赖属性(DependencyProperty)
当我们创建新的类和成员时,我们花费了大量的时间和精力是它们尽可能的好用,好理解,好发现.通常我们会遵循.Net框架设计指南,尤其是会不断地研究这个新类与其他类,未来计划等内容之间的关系. 当命名依赖属 ...
- Kubernetes集群管理面板的安装及使用
Kubernetes集群管理面板的安装及使用 1.前言 若海的腾讯云Lighthouse组建跨地域Kubernetes集群,让我成功体验到了Kubernetes集群诸多优点,但是非技术出生的我,长时间 ...
- Sell Pigs 题解
Sell Pigs 双倍经验 题目大意 有 \(n\) 个顾客前来买猪,共有 \(m\) 个猪圈,每个顾客携带着某一些猪圈的钥匙,需要买一定数量的猪.在顾客买完后,我们可以将打开的猪圈中的猪随意移动, ...
- Util应用框架Web Api开发快速入门
本文是使用Util应用框架开发 Web Api 项目快速入门教程. 前面已经详细介绍了环境搭建,如果你还未准备好,请参考前文. 开发流程概述 创建代码生成专用数据库. Util应用框架需要专门用来生成 ...