Java运算符--自增“++“自减“--“

运算符是一种特殊符号,用以表示数据的运算,赋值和比较,分为六大: 算数运算符,赋值运算符,比较运算符,条件(三目)运算符,位运算符,逻辑运算符

运算符1: 算数运算符

取模运算: 开发中判断数值是否可以被整除,如果可以整除,模数就为0

结果的正负与被模数的正负相同

Java中的自增自减运算符("++" and "--")

1、三个必会重点

2、基本运算规则

3、三种题目类型

1、三个重点

* 自增自减运算符的优先级一定是高于赋值运算的

* 自增自减运算符分为前自增自减和后自增自减,前自增自减时,先自增,后引用(赋值)。后自增自减时,先引用(赋值)后自增。

* 当一条语句中的变量无需赋值给其他变量时,或赋值给自身时,前后自增或前后自减无区别,结果相同。

2、基本运算规则

自增自减运算符就是在变量值的原始基础上进行 +1(加1)或者 -1(减1)的操作。此处的a代表某个变量名:分为"++a"(前自增),"a++"(后自增) and "--a"(前自减),"a--"(后自减)。++a时先自增后引用(赋值),a++时先引用(赋值)后自增。当语句中无需给其他变量赋值时,前++与后++无区别,自减符与自增符同理。引用是指引用变量值。

3、三种题目类型

public class Oprtest{
    public static void main(String[] args){
        //当语句无需给其他变量赋值时,无论是前++还是后++结果相同,自减同理。
        int a = 2;
        a++;
        System.out.println(a);//3
        int b = 2;
        ++b;
        System.out.println(b);//3
        //********************************
        //当语句需要赋值给其他变量时,遵守基本运算规则
        //1、++为前缀时(先自增后引用)
        int a1 = 3;
        int b1 = ++a1;
        System.out.println("a1 = " + a1 + "\tb1 = " + b1);// '\t'为制表符
        /*
        此处++为前缀,遵守先自增后引用规则。
        首先,a1值先引用原始变量值自增1变为4,然后计算机将其放入操作数栈内等待引用,此处记做数栈1
        而后,a1开始引用数栈1内的数值4,然后计算机将其放入操作数栈内等待赋值,此处记做数栈2
        紧接着将数栈2内的值赋值给b1,b1为4
        预测打印结果为,a1 = 4,b1 = 4
        */
        //2、++为后缀时(先引用后自增)
        int a2 = 3;
        int b2 = a2++;
        System.out.println("a2 = " + a2 + "\tb2 = " + b2);
        /*
        此处++为后缀,遵守先引用后自增规则。
        首先,a2引用原始变量值3,然后计算机将其放入操作数栈内等待引用此处记做数栈1
        而后,a2引用数栈1内的数值3进行自增,变为4,然后计算机将其放入操作数栈内等待赋值,此时数栈1内值为
        3,数栈2内值为4,计算机将引用引用数栈1内的值进行打印。注意!自增运算是在赋值运算之前完成的,自增运算的优先级高于赋值运算!
        预测打印结果为,a2 = 4 ,b2 = 3  
        */
        //3、复杂的语句运算方式
        //Type1
        int a3 = 2;
        int b3 = ++a3 + ++a3;
        System.out.println("a3 = " + a3 + "\tb3 = " + b3);
        /*
        优先级解析:当一个语句进行运算时,如果先运算A,或者先运算B,会对运算结果产生影响,那此时就必须遵守优先级,例如乘法和加法的优先级,当先运算A,或者先运算B,不会对结果产生影响时,计算机会从左往右依次进行运算。
        此处,++都为前缀,所以两个都是先自增后引用。
        首先a3引用原始变量2进行自增,自增后为3,将自增后的值放入操作数栈内,此处记做数栈1,等待引用
        其次,a3引用数栈1内的数值,此时a3数值为3。
        而后,计算机识别到了+法运算符,需要另一个变量来协助数栈1内的值完成加法操作
        此时计算机识别到了自增运算符,是前缀的自增符++,所以先自增,此时自增后a3数值变为4,为了完成加法操作,计算机将第二次自增的数值放入数栈2内。
        此时引用数栈2内的数值,赋值给a3,a3此时为4
        接下来计算机引用数栈1内的值3与数栈2内的值4完成加法操作,和为7,然后赋值给b3
        预测打印结果为,a3 = 4 ,b3 = 7
        */
        //Type2
        int a4 = 2;
        int b4 = ++a4 + a4++ + ++a4;
        System.out.println("a4 = " + a4 + "\tb4 = " + b4);
        /*
        首先观察,有前缀与后缀,优先级参考初中数学:首先换元为a,b,c。a+b+c与(a+b)+c结果不发生变化。
        前缀++,先自增后引用,a4自增1变为3,而后引用3,a4值变为3,计算机将此值放入操作数栈内,此处记做数栈1,此时计算机识别到+法运算符,开始寻找第二变量值完成加法操作,而后识别到后缀++,先引用后自增,计算机开始引用数栈1内的值3,并将其放入数栈2内,而后自增,变为4。    到此,因为优先级,我们说过自增自减符优先级是大于赋值大于加法的,但此处先算与后算并不影响最后的结果,所以计算机开始将数栈1的值与数栈2的值进行加法操作,而不是继续进行自增操作,加法操作的和为6,并将其放入数栈3内。此时向后运行,识别到了前缀自增符,先自增后引用,此时增1并引用,a4值变为5,并放入数栈4内,最后数栈3内的值6和数栈4内的值6进行第二次求和运算,并赋值给b4,结果为11.
        预测打印结果为,a4 = 5 , b4 = 11
        */
        //将运算结果赋值给自身
        int a5 = 2;
        a5 = ++a5;
        System.out.println("a5 =" + a5);
        //只需牢记,自增自减运算符的运算优先级高于赋值运算即可    
        //此处为前缀,先自增后引用
        //2自增1变为3然后给a5引用,最后赋值给a5就好
        //预测打印结果为,a5 = 3
        int a6 = 2;
        a6 = a6++;
        System.out.println("a6 = " + a6);
        //后缀,先引用后自增
        //引用原始数值2,并存入操作数栈内,此处记做数栈1
        //而后自增1变为3,存入数栈2
        //最后将数栈1的值赋给a6
        //预测输出结果为,a6 = 2
        //Type3
        int a7 = 2;
        a7 += ++a7 + ++a7;
        System.out.println("a7 = " + a7);
        /*
        此题出现了复合运算符,计算机在运行时是从左往右,从上往下识别
        首先,因为是复合运算,计算机会先将2存入数栈1等待引用,而后开始计算 = 右边的值,前缀++,遵守运算规则,自增为3并存入数栈2,而后给a7引用
        继续运行,识别到了加法运算符,需要完成加法操作,继续运行,第二个前缀++,首先自增1,变为4,存入数栈3,随后引用,求和为7并存入数栈4.
        此时左右求和,数栈1的值2,与数栈4的值7求和,结果为9,最后给a7赋值
        预测输出结果为,a7 = 9
        */
    }
}

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值