Java支持以下运算符:
- 算术运算符:+,-,*,/,%,++,--
- 赋值运算符:=
- 关系运算符:>,<,>=,<=,!=instanceof
- 逻辑运算符:&&,||,!
- 位运算符:&,|,^,~,>>,<<,>>>
- 条件运算符:?:
- 扩展赋值运算符:+=,-=,*=,/=
优先级问题
一般而言,单目运算符优先级较高,赋值运算符优先级较低。算术运算符优先级较高,关系和逻辑运算符优先级较低。多数运算符具有左结合性,单目运算符、三目运算符、赋值运算符具有右结合性。
算术运算符:
public class Demo01 {
public static void main(String[] args) {
//二元运算符
//Ctrl+D : 复制当前行到下一行
int a = 10;
int b = 20;
int c = 25;
int d = 25;
System.out.println(a+b);
System.out.println(a-b);
System.out.println(a*b);
System.out.println(a/(double)b); //可能产生小数时要注意强转问题
//取余 模运算
System.out.println(c%a); // c/a 25/10 = 2...5 5为余数
}
}
算术运算符中最重要的就是自增和自减运算符,一定要弄明白++a和a++的区别
public class Demo4 {
public static void main(String[] args) {
//++ -- 自增 自减
int a = 3;
int b = a++; //执行完这一行代码后,先给b赋值,再自增
//a++ a = a + 1;
System.out.println(a); //4
//++a a = a + 1;
int c = ++a; //执行完这一行代码后,先自增,再给c赋值
System.out.println(a); //5
System.out.println(b); //3
System.out.println(c); //5
//幂运算 2^3 --> 2*2*2 = 8
//很多运算,我们会使用一些工具类来操作
double pow = Math.pow(2,3);
System.out.println(pow);
}
}
【注意点】
public class Demo2 {
public static void main(String[] args) {
long a = 123123123123L;
int b = 123;
short c = 10;
byte d = 8;
//如果参与运算的有long或者double类型,结果也是long或者double
//除此之外,都是int,(byte+short结果也是int)
System.out.println(a+b+c+d); //Long
System.out.println(b+c+d); //int
System.out.println(c+d); //int
}
}
public class Demo07 {
public static void main(String[] args) {
int a = 10;
int b = 20;
//字符串连接符 + ,String
System.out.println(""+a+b); //1020
System.out.println(a+b+""); //30
}
}
关系运算符:
public class Demo3 {
public static void main(String[] args) {
//关系运算符返回的结果:正确 错误 布尔值
int a = 10;
int b = 20;
System.out.println(a>b); //false
System.out.println(a<b); //true
System.out.println(a==b); //false
System.out.println(a!=b); //true
}
}
逻辑运算符:
//逻辑运算符
public class Demo05 {
public static void main(String[] args) {
//与(and) 或(or) 非(取反)
boolean a = true;
boolean b = false;
//逻辑与运算:两个变量都为真,结果才为true
System.out.println("a && b:" + (a&&b));
//逻辑或运算:两个变量有一个为真,结果才为true
System.out.println("a || b:" + (a||b));
//逻辑非运算:如果为真,变成假;如果为假,变成真
System.out.println("!(a && b)" + !(a&&b));
//短路运算 b为假 逻辑与 短路 直接返回false
System.out.println("b && a:" + (b&&a));
int c = 5;
boolean d = (c<4)&&(c++<4);
System.out.println(d); //false
System.out.println(c); //5,因为短路了,后面根本没有执行
}
}
位运算符:
//位运算符
public class Demo06 {
public static void main(String[] args) {
/*
* A = 0011 1100
* B = 0000 1101
*--------------------------------------------------
* 按位来比的
*
* A&B 0000 1100 只有两位都是1才为1,否则为0
* A|B 0011 1101 只有两位都是0才为0,否则为1
* A^B(异或)0011 0001 相同为0,不同为1
* ~B 1111 0010 与原来的完全相反
* -------------------------------------------------
* <<左移 相当于把数字*2
* >>右移 相当于把数字/2
* */
System.out.println(2<<3); //16
/*
* 0000 0000 0
* 0000 0001 1
* 0000 0010 2
* 0000 0100 4
* 0000 1000 8
* 0001 0000 16
* */
}
}
条件运算符:
也叫三元运算符
public class Demo08 {
public static void main(String[] args) {
//x ? y : z
//如果x==true,则结果为y,否则为z
int score = 80;
String type = score < 60 ? "不及格":"及格";
//比if更精简
System.out.println(type); //及格
}
}