java支持如下运算符
-
算术运算符:+,-,*,/,%,++(自增),–(自减)
-
赋值运算符:=
-
关系运算符:>,<,>=,<=,==,!=,instanceof
-
逻辑运算符:&&(逻辑与运算),||(逻辑或运算),!(非)
-
位运算符:&,|,^(异或),~(非),>>(二进制右移),<<(二进制左移).>>>
-
条件运算符(eg:x ? y : z,若x为真,输出y,为假,输出z)
-
扩展赋值运算:+=,-=,*=,/=
++a与a++
- a++:先执行本行代码,在给a+1
public class Test {
public static void main(String[] args) {
int a = 3;
int b = a++;
//a=a+1
//a=a+1
int c = ++a;
System.out.println(a);
System.out.println(b);
System.out.println(c);
}
}
运行结果
分析:a++是先执行b=a后在进行a=a+1.就相当与执行了注释之中的内容;++a是先执行a=a+1在执行c=a。
幂运算(使用math工具类)
public class Test {
public static void main(String[] args) {
double pow = Math.pow(2,3);//表示2的3次方
System.out.println(pow);
}
}
运行结果:
逻辑运算符
public class Test {
public static void main(String[] args) {
boolean a = true;
boolean b = false;
System.out.println(a&&b);//逻辑与运算,全真则真,有假为假
System.out.println(a||b);//逻辑或运算,有真则真,全假为假
System.out.println(!(a&&b));//非运算,取反
}
}
- 注意短路运算
public class Test {
public static void main(String[] args) {
int c = 5;
boolean d = (c<4) && (c++<4);
System.out.println(d);
System.out.println(c);
}
}
&&运算规则是,若前者为假,则无需判断后者,直接输出假。如上面代码(c<4)&&(c++<4),先进行c<4的判断,c<4结果为假,所以d的值为false,并没有进行c++<4的判断,所以c=5,并没有变成6。
位运算
public class Test {
public static void main(String[] args) {
/*
A = 0011 1100
B = 0000 1101
A&B = 0000 1100 每一位进行与运算
A|B = 0011 1101 每一位进行或运算
A^B = 0011 0001 异或:相同为0,相异为1
~B = 1111 0010 非:每一位取反
*/
}
}
- 经典题型:如何快速算出2*8?
public class Test {
public static void main(String[] args) {
//<<左移 >>右移
/*
二进制 十进制
0000 0000 0
0000 0001 1
0000 0010 2
0000 0100 4
0000 1000 8
*/
System.out.println(2<<2);//将二进制0010的1左移2位变成二进制1000,转为十进制为8.
}
}
扩展赋值运算
public class Test {
public static void main(String[] args) {
int a = 10;
int b = 20;
a+=b; //a = a + b
a-=b; //a = a - b
System.out.println(a);
//字符串连接符
System.out.println("ab"+a+b);
System.out.println(a+b+"ab");
}
}
运行结果
注意:字符串连接符,连接两个字符串时,若前者是字符串,则按字符串进行连接;若前者是运算,则先进行运算,运算结果与后者进行拼接。
优先级
一元运算符>加减乘除>与或,相等,按位与或