运算符
A.算术运算符
加,减,乘和普通的数学运算方式相同
除法需注意的几个问题
1.分析:int a = 1; int b = 2; int c = a / b;
System.out.println(c);结果:0
结论:a,b两个整型变量相除,结果不能整除时,小数点后位数舍去,而不是四舍五入
2.分析:double a = 1; int b = 2; double c = a / b;
System.out.println(c);结果:0.5
结论:参与运算的变量中,有整型int,有double,有short,那么结果取决于变量中表示范围最大的那个变量类型,此例中为double型
3.分析:int a = 1; int b = 2; double c = a / b;
System.out.println(c);结果:0.0
结论:按照优先级,先算=右边的,即先计算a / b,结果为0,算完将结果再变换为double型。可知:数学运算时,是一步步地变换类型,而不是首先变换为运算范围最大的,再计算。
4.分析:int a = 1; int b = 2; double c =(double)a / b;
System.out.println(c);结果:0.5
结论:a,b虽为整型,但在运算前,就通过(double)强制转换a的值为一个匿名的double型变量值
取模(余)运算符,使用%表示
1.分析:int a = 5; int b =3; int c = a % b;
System.out.println(c);结果:2
结论:与普通除法取余相同,5 / 3的余数就是2
2.分析:int a =- 5; int b =3; int c = a % b;
System.out.println(c);结果:-2
结论:与普通除法取余相同,-5 / 3商-1,余数是-2
3.分析:int a = -5; int b = -3; int c = a % b;
System.out.println(c);结果:-2
结论:与普通除法取余相同,-5 / -3商1,余数是-2
4.分析:int a = 5; int b = -3; int c = a % b;
System.out.println(c);结果:2
结论:与普通除法取余相同,5 / -3商-1,余数是2
总之:取模结果的符号与被除数相同。
5.分析:int a = 5; int b = -3; int c = a % b;
System.out.println(c);结果:2
B.关系运算符:
大于(>),小于(<),等于(==),不等于(!=),大于等于(>=),小于等于(<=)
1)分析:int a = 3;int b = 2;boolean c = (a>b);
System.out.println(c);结果:true
2)分析:int a = 3;int b = 2;boolean c = (a<b);
System.out.println(c);结果:false
C.逻辑运算符:(也为布尔型)(执行顺序,左到右)
1)逻辑与(表示并且):使用&&表示,是双目运算符(即有两个操作数的运算符),只有当两个操作数都为真,结果才为真,其他均为假
分析:int a = 1; int b = 2; int c = 3; int d = 4;
boolean e = (a<b) && (c<d); System.out.println(e);
结果:true
2)逻辑或(表示或者):使用||表示,也是双目运算符,只有当两个操作数均为假时才为假,其他均为真。
分析:int a = 1; int b = 2; int c = 3; int d = 4;
boolean e = (a<b) || (c>d); System.out.println(e);
结果:true
3)关于逻辑运算符的短路特性:
理解:逻辑运算符按从左到右的执行顺序,当遇到可判定出结果的步骤时,直接输入结果,不再继续执行下去。
分析:(1)int a = 3;Boolean b = (1<2) && ((a=1)<4);
System.out.println(b);
System.out.println(a);
结果:true
1
(2)int a = 3;Boolean b = (1>2) && ((a=1)<4);
System.out.println(b);
System.out.println(a);
结果:false
3
结论:由于1>2为假,因此可判定结果为假,后面的无需再执行,所以a=1没有执行,a任然是3.
引申:在逻辑或运算符中,||前为真,则||后不再执行
总之,逻辑与:如果第一个操作数为false,结果就是false,在这种情况下,逻辑与后面的运算不会被执行,则发生了短路
逻辑或:如果第一个操作数为true,结果就是true,在这种情况下,逻辑或后面的运算不会被执行,则发生了短路
4)关于变量的自增与自减:
实现a自加1的几种形式:int a = 2; a += 1; //等价于a = a+1; //等价于a++;//等价于++a;
a++与++a的区别:
分析:int a = 1; int b = a++;结果:a==2,b==1;
Int a = 1; int b = ++a;结果:a==2,b==2;
结论:关于int b = a++;先将a的值赋给b,后a自加;关于int b = ++a先将a自加,后将自加后a的值赋给b。
实现减法自减与加法自减相同,只是做的减发运算。
a = a + 2等价于a += 2;
a = a - 2等价于a -= 2;
a =a * 2等价于a *= 2;
a = a / 2等价于a /= 2;
D.条件运算符(三元表达式)
其形式为type d = a ? b : c;
分析:如果a为真,则返回b,如果a为假,则返回c