首页 > 编程语言 >学透java自增(++)自减(--)运算符

学透java自增(++)自减(--)运算符

时间:2023-11-16 11:13:10浏览次数:36  
标签:自增 java ++ System 运算符 int println 赋值 out

基本介绍

自增(++)和自减(--)运算符是对变量在原始值的基础上进行加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,++,System,运算符,int,println,赋值,out
From: https://www.cnblogs.com/luoshuai7394/p/17822354.html

相关文章

  • JavaScript 的数组方法
    数组方法构成了任何编程语言中数组的基本方面。这些方法使程序员能够操作、迭代和转换数组,为各种任务提供有效的解决方案。无论是排序、过滤还是映射数据,理解和利用数组方法都是释放代码全部潜力的关键值()该方法返回一个迭代器,为数组中的每个索引提供一个值,不需要任何参数。长度......
  • JavaDoc生成文档(待完善)
    使用IDEA产生Java.doc文档在网摘点赞里  命令行:javadoc-encoding UTF-8-charsetUTF-8Doc.java(文件名)    ......
  • Java8中Optional类的认识和用法
       Optional在Java8中引入,目的是解决 NullPointerExceptions的问题。它可以保存类型T的值,代表这个值存在。或者仅仅保存null,表示这个值不存在。原来用null表示一个值不存在,Optional可以更好的表达这个概念。并且可以避免空指针异常。这样我们就不用显式进行空值检测......
  • Java字符串、字符与数字之间的相互转换
    一、数字转字符串//将整个数字转化为字符串inti=456;//方法一Stringstr1=Integer.toString(i);System.out.println(str1);//方法二Stringstr2=i+"";System.out.println(str2)二、字符串转数字//整数方法一Stringstr="123";intnum1=Integer.parseInt(str);/......
  • Java 创建多线程的三种方法
    在Java中创建多线程,往往都要通过Thread类来实现,今天学习下Java中创建多线程的三种方法[1]。1.继承Thread类通过继承Thread类实现多线程。主要方法:1.voidrun(),线程开启后,方法将被调用执行2.voidstart(),使此线程开始执行,Java虚拟机会调用run()方法实现步骤:1.定......
  • 想快速进入人工智能领域的Java程序员?你准备好了吗?
    引言今天我们来探讨一下作为Java程序员,如何迅速融入人工智能的领域。,当前有一些流行的LLMs选择,例如ChatGPT、科大讯飞的星火、通义千问和文心一言等。如果你还没有尝试过这些工具,那么现在也不失为一个很好的机会,赶快体验一下吧。这些工具不仅能够为你的Java编程工作提供更多的可......
  • Java 多线程安全的使用小结
    在使用多线程进行编程的过程中,难免遇到共享资源读写问题,这是为了线程安全,一种思路就是使用锁来控制并发读写问题。在通过锁来实现并发安全中,常用的有以下几种:synchronized,对象锁ReentrantLock,重入锁ReentrantReadWriteLock,读写锁今天从使用的角度来看看这几种锁是如何使......
  • Java 线程池使用小结
    我们在使用多线程编程的时候,为何要用线程池呢?使用线程池的好处是什么呢?线程池有哪些使用场景?为何使用线程池?因为线程资源宝贵,不论创建新的线程还是销毁线程,都有相应的资源开销,比如在数据库连接方面,每个请求过来都是新建连接数据库的线程,请求少,资源开销总体不大,但也架不住请求一......
  • 最新版本的AndroidStudio新建Android项目时设置语言为java
    我们之前用AndroidStudio新建项目时是这样的 选择EmptyActivity,下一步 怎么没了语言选项了,java呢?改为EmptyViewsActivity这个就好了 ......
  • void 作为运算符后面接的是表达式,void expression。而void(0)也是被当做void 0。如果
    void();上面表达式的结果是:AundefinedBTypeErrorCnullDSyntaxError正确答案:Dtypeof1;//'number'typeof(1);//'number'typeof();//SyntaxError语法错误void0;//undefinedvoid(0);//undefinedvoid();//SyntaxError语法错误也就是说错的不是void,而是......