运算符号
算术运算符:+,-,*,/,%(余数),++(自增),--(自减)
赋值运算符:=
关系运算符:>,<,>=,<=,==,!= instanceof
逻辑运算符:&&,||,!(与,或,非)
位运算符:&,|,^,~,>>,<<,>>>
条件运算符:?,:
扩转赋值运算符:+=,-=,*=,/=
加减乘除
操作时需要注意运算结果是否会有浮点数
计算中,如果有高级的数据类型参与,那计算出来的结果类型,一定是最高的那个数据类型,默认为int类型
public class Dem1 {
public static void main(String[] args) {
//二元运算符
int a = 10;
byte b = 20;
int c = 25;
long d = 25;//long类型是他们中最高的类型,所有有long类型参与的计算,结果都为long,否则就默认int类型
System.out.println(a+b);//结果为 30
System.out.println(a-c);//结果为-15
System.out.println(d*b);//有d参与,为long类型,结果为500
System.out.println(a/(double)b);//结果为小数,所以要把int类型强转double。结果为0.5
System.out.println(c%a)//c除以a的余数是5,所以结果为5
}
}
关系运算
在关系运算符中,大于,小于,等于和不等于是用布尔值的false和true来输出结果。
public class Dem3 {
public static void main(String[] args) {
//关系运算符的返回结果: 正确,错误 (布尔值)
int a=10;
int b=20;
int c=21;
System.out.println(a>b);//大于 false
System.out.println(a<b);//小于 true
System.out.println(a==b);//是否相等 false
System.out.println(a!=b);//是否不相等 true
}
}
自增,自减
++,--,被叫做自增,自减。以自增为例,一个自增相当于加1,当一个变量a,在++a和a++两种表达时,算法的路径会不一样。++a是先计算,再赋值。a++是先赋值,再计算。在一个方法中,++会从上到下积累,在输出句之前出现多少次++,最后的a就会加了多少个1。自减同理
public class Dem4 {
public static void main(String[] args) {
//++ -- 自增,自减 一元运算符
int a = 3;//给a赋初始值
int b = a++;//先把a的值赋给b后a再+1
System.out.println(a);//输出a等于4
int c = ++a;//先+1后再给c赋值,就是4+1,再赋值给c。
//此时c的值是上面a++得到的值4,再以4的值以++a计算后得到5
System.out.println(a++);//得到值为5
System.out.println(a);//得到值为6,
System.out.println(b);//得到值为3
System.out.println(c);//得到值为5
//幂运算的写法
double pow=Math.pow(3,2);
System.out.println(pow);//得出结果9.0
}
}
逻辑运算
&& || !称为与,或,非。以布尔值进行运算。 与 是代表A与B,或 是代表A或者B,非代表取反,正为负,负为正。
与在计算时,需要A与B都为真,结果才为真。如在第一个变量就检测出为假,则不作后面的运算,直接为假
或在计算时,A或者B有一个为真,则结果为真。如在第一个变量检测出为真,则不作后面的运算,直接为真
非在计算时,如计算结果为真,则输出为假。结果为假,则输出为真。
短路运算
求证 “与”“或”在运算时,检测到第一个变量为假,或者真时,就不会再对后面的变量进行运算
public class Dem5 {
public static void main(String[] args) {
//逻辑与运算 与 或 非
boolean a = true;
boolean b =false;
System.out.println("a && b:"+(a&&b));//与:两个变量都为真,结果才为true
System.out.println("a || b:"+(a||b));//或:其中一个变量为真,结果就为true
System.out.println("!(a&&b):"+!(a&&b));//如结果为真,则变为假。为假则变为真
//短路运算:
int c = 5;
boolean d =(c<4)&&(c++<4);
//运算:c小于4为错误,在&&之前就被系统检测到false,所以不执行后面的c++变量
System.out.println(d);//结果为false
System.out.println(c);//结果为5 则证明在&&之前就短路了
}
}
位运算
& 与 | 或 ^亦或 ~取反 <<左移 >>右移 用于二进制逻辑运算
A = 0011 0110
B = 1010 0100
A&B =010 0100(两个都为1,结果才为1)
A|B = 1011 0110(有一个为1,结果就为1)
A^B = 1001 0010(相同则为0,不同则为1)
~B = 0101 1011(和原本的数字相反)
左移和右移<< >>
0000 0000 0
0000 0001 1
0000 0010 2
0000 0011 3
0000 0100 4
0000 0101 5
0000 0110 6
0000 0111 7
0000 1000 8
0000 1001 9
.......
0001 0000 16
由此可以看出,左移<<相当于*2,右移>>相当于/2
public class Dem6 {
public static void main(String[] args) {
System.out.println(2<<3);//输出结果为16
System.out.println(16>>3);//输出结果为2
}
}
扩展赋值运算符
+=,-=,*=,/= +=是求和,如 a+=b,就是代表a=a+b。但求出的数值会累积叠加,这里和自增自减相同,在一个方法里面,输出语句之上的变量都会叠加。另外三个运算符也是同理。
public class Dem7 {
public static void main(String[] args) {
int a = 10;//给a赋初始值
int b = 20;//给B赋初始值
a+=b;
System.out.println(a);//结果为30 a的10+b的20
b+=a;
System.out.println(b);//结果为50 b的20+a的30
a*=b;
System.out.println(a);//结果为1500 a的30*b的50
System.out.println(""+a+b);//输出结果为150050
//在该运算符两侧,只要有前面出现了String类型,就会把其它类型都转换为String类型再进行连接,所以得出结果为1020
}
}
三元运算符
? : 为三元运算符
举例 a ? b : c
如果a为真,结果就为b,如果为假,则结果为c
package operator;
//三元运算符
public class Dem8 {
public static void main(String[] args) {
int score = 59;
String t = score<60?"不及格":"及格";
System.out.println(t);//score<60 为真,结果为"不及格"
}
}