运算符是一种特殊符号,用以表示数据的运算,赋值和比较,分为六大: 算数运算符,赋值运算符,比较运算符,条件(三目)运算符,位运算符,逻辑运算符
运算符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
*/
}
}