1. 基本运算符
-
Java语言支持如下运算符:
- 算数运算符:+,-,*,/,%,++,–
- 赋值运算符:=
- 关系运算符:>,<,>=,==,!=,instandeof
- 逻辑运算符:&&,||,!
- 位运算符:&,|,^,~,>>,<<,>>>(了解)
- 条件运算符:?:
- 扩展赋值运算符:+=,-=,*=,/=
-
注意事项
-
运算前后产生的数据类型转换、内存溢出和精度问题。
//二元运算符 int a = 10; int b = 20; int c = 25; int d = 25; System.out.println(a+b); //10+20 输出 30 System.out.println(a-b); //10-20 输出 -10 System.out.println(a*b); //10*20 输出 200 System.out.println(a/b); //10÷20 输出 0 //int类型相除得到int类型,舍了小数点后的数字 System.out.println(a/(double)b); //10÷20 输出 0.5 System.out.println(c%b); //25%20 输出 5 //25÷20 = 1余5 long e = 123123123123123L; int f = 123; short g = 10; byte h = 8; System.out.println(e+f+g+h); //输出 long System.out.println(f+g+h); //输出 int System.out.println(g+h); //输出 int //关系运算符返回的结果:布尔类型(true/false) int i = 10; int j = 20; System.out.println(i>j); //输出 false System.out.println(i<j); //输出 true System.out.println(i==j); //输出 false System.out.println(i!=j); //输出 true
-
2. 自增自减和Math类
-
自增运算符
-
自增运算可视为两个步骤:赋值(=),加一(+1)。
-
b=a++; => b=a; a=a+1;
-
b=++a; => a=a+1; b=a;
int a = 1; int b = a++; System.out.println(a); //输出 2 System.out.println(b); //输出 1 int c = 1; int d = ++c; System.out.println(c); //输出 2 System.out.println(d); //输出 2
-
-
幂运算
-
幂运算不属于基本运算,可使用Java提供的工具类(Math)来操作。
double a = Math.pow(2,3); //2^3 = 2*2*2 = 8
-
3. 逻辑运算与位运算
-
逻辑运算包括与(&&),或(||),非(!)。
-
与(&&):都为真(true),才为真(true),否则假。
-
或(||) :都为假(false),才为假(false),否则真。
-
非( ! ):真(true)变假(false),假(false)变真(true)。
boolean a = true; boolean b = false; System.out.println(a&&b); //输出 false System.out.println(a||b); //输出 true System.out.println(!a); //输出 false
-
-
短路运算
-
与(&&)运算中,运算符前的表达式为假,则不执行运算符后的表达式。
int a = 1; boolean b = (a>2)&&((a++)<1); System.out.println(b); //输出 false System.out.println(a); //输出 1 没有执行a++ 证明&&后的表达式没有执行
-
-
位运算用于计算二进制数,以位为单位进行计算(或者称之为比较更通俗易懂),包括与(&),或(|),异或(^),取反(~),左移(<<),右移(>>)等。
-
与(&):都为1,才为1,否则为0。
-
或(|):都为0,才为0,否则为1。
-
异或(^):相同为0,不同为1。
-
取反(~):0变1,1变0。
A = 0011 1100 B = 0000 1101 A&B = 0000 1100 A|B = 0011 1101 A^B = 0011 0001 ~B = 1111 0010
-
左移(<<):将所有1向左移动,移一位相当于十进制数乘以2。
-
右移(>>):将所有1向右移动,移一位相当于十进制数除以2。
System.out.println(3<<2); //输出 12 0000 0011 <<2位 0000 1100 System.out.println(2<<3); //输出 16 0000 0010 <<3位 0001 0000 System.out.println(12>>3); //输出 1 0000 1100 >>3位 0000 0001 System.out.println(24>>3); //输出 3 0001 1000 >>3位 0000 0011
-
4. 其他
-
= :赋值运算,从右向左执行。
a = b; //将a的值赋值给b
-
-= :先进行减运算,再执行赋值运算。
a -= b; //a = a - b;
-
+= :先进行加运算,再执行赋值运算。
a += b; //a = a + b;
-
*= :先进行乘法运算,再执行赋值运算。
a *= b; //a = a * b;
-
/= :先进行除法运算,再执行赋值运算。
a /= b; //a = a / b;
-
+:加号除了是基本运算符,还是字符串连接符。表达式前+字符串会影响字符串后的表达式,表达式后加字符串不影响字符串前的表达式。
int a = 10; int b = 20; System.out.println(a+b); //输出 30 System.out.println(""+a+b); //输出 1020 System.out.println(a+b+""); //输出 30
-
三目运算符:? :
- x ? y :z; 如果x==true,结果为y,否则结果为z。
int score = 50; String type = score < 60 ? "不及格":"及格"; System.out.println(type); //输出 不及格
-
运算符优先级
- 一般来说应用性不大,开发中通常使用()自定义优先级。
优先级 运算符 结合性 1 ()、[]、{} 从左向右 2 !、+、-、~、++、– 从右向左 3 *、/、% 从左向右 4 +、- 从左向右 5 >>、<<、>>> 从左向右 6 <、<=、>、>=、instanceof 从左向右 7 ==、!= 从左向右 8 & 从左向右 9 ^ 从左向右 10 | 从左向右 11 && 从左向右 12 || 从左向右 13 ? : 从右向左 14 =、+=、-=、*=、/=、&=、|=、^=、~=、<<=、>>=、>>>= 从右向左