8、基本运算符
运算符
-
Java语言支持如下运算符:
-
算术运算符:+,-,*,/,%,++,--
-
赋值运算符:=
-
关系运算符:>,<,>=,==,!=,!=instanceof
-
逻辑运算符:&&,||,!
-
位运算符:&,|,^,~,>>,<<,>>>
-
条件运算符:?
-
扩展赋值运算符:+=,-=,*=,/=
二元运算符
二元运算符中+,-,*,/和我们平常数学中没有什么区别,但是这里我们需要注意一下运算后数据类型的变化以及取模运算。
public class Demo01 { //返回参数数据类型 public static String getType(Object o){ return o.getClass().getName(); } public static void main(String[] args) { //二元运算符 byte a = 8; short b = 10; int c = 15; long d = 12312312312L; System.out.print(getType(a+b+c+d) + ' '); //打印a+b+c+d的数据类型 System.out.println(a+b+c+d); //打印a+b+c+d的值 System.out.print(getType(a+b+c) + ' '); System.out.println(a+b+c); System.out.print(getType(a+b) + ' '); System.out.println(a+b); //%为取模操作即求余数 10/8=1···2 即 10%8=2 System.out.println(b%a); } }
由此我们可以得出结论:
- 操作数中有一个数为long类型,那么结果也为long类型(整型)
- 同理,如果有一个数为double,那么结果也为double(浮点型)
- 操作数中如果没有long类型,那么结果都为int类型
-
一元运算符
一元运算符包括自增(++)和自减(--)
例如:
public class Demo03 {
public static void main(String[] args) {
// ++ 自增 -- 自减 一元运算符
int a = 3;
int b = a++; //先执行int b = a; 再执行a = a+1; 此时a=4 b=3
int c = ++a; //先执行a = a+1; 再执行int c = a; 此时a=5 c=5
System.out.println(a);
System.out.println(b);
System.out.println(c);
//幂运算
double d = Math.pow(2,3); //即2^3 = 8 Math是一个数学工具类
System.out.println(d);
}
}
输出结果:

关系运算符
关系运算符比较简单,通常用来做比较返回一个布尔值(true/false)
我们直接来看例子:
public class Demo02 {
public static void main(String[] args) {
//关系运算符返回的结果:true、false(布尔类型)
int a = 10;
int b = 20;
System.out.println(a > b);
System.out.println(a < b);
System.out.println(a == b);
System.out.println(a != b);
}
}
输出结果:

逻辑运算符
逻辑运算符包括与(&&)、或(||)、非(!)
还是直接来看例子:
public class Demo04 {
public static void main(String[] args) {
//逻辑运算符 &&与 ||或 !非
boolean a = true;
boolean b = false;
//逻辑与运算:两个变量都为true,返回true,否则返回false
System.out.println("a && b =" + (a && b));
//逻辑或运算:两个变量中有一个为true,则返回ture,否则返回false
System.out.println("a || b =" + (a || b));
//逻辑非运算:如果本身为true,则返回false。如果本身为false,则返回true。
System.out.println("!(a && b) =" + !(a && b));
}
}
输出结果:

短路运算
逻辑运算中,如果前面运算中已经出现false,则不会再进行后面的运算
例如:
public class Demo05 {
public static void main(String[] args) {
//短路运算
int a = 5;
boolean b = (a<4)&&(a++>5); //a<4为false,后面不会进行运算
System.out.println(b); //false
System.out.println(a); //a++不会被执行 a=5
}
}
上面运算中,先判断 a<4 结果为false ,则不会再计算a++>5 。
输出结果:

位运算符
直接上例子:
A = 0011 1100
B = 0000 1101
与运算 A&B = 0000 1100 都为1,才为1
或运算 A|B = 0011 1101 有一个1,就为1
非运算 ~A = 1100 0011 取反:0为1,1为0
异或运算 A^B = 0011 0001 两个相同则为0,不同为1
左移<< a向左移一位相当于a*2
右移>> a向右移一位相当于a/2
若符号位为正,则在最高位插入0;若符号位为负,则在最高位插入1
无符号右移>>> 无论正负,都在最高位插入0左移右移效率极高
计算2*8 最快的方法即为 2<<3
三元运算符
x ? y : z 这个语句的意思为如果x为真,则结果为y,否则结果为z
运算符优先级
| 优先级 | 运算符 |
|---|---|
| 1 | () |
| 2 | 一元运算符:+(正数)、-(负数)、!(逻辑非)、~(按位取反)、(++)自增、(--自减) |
| 3 | 二元运算符:* / % + - (* / % 优先级要高于 + -) |
| 4 | 位运算符:<< >> >>> |
| 5 | <、<=、>、>=、instanceof |
| 6 | == 、!= |
| 7 | & |
| 8 | ^ |
| 9 | | |
| 10 | && |
| 11 | || |
| 12 | 三元运算符 ? : |
| 13 | =、+=、-=、*=、/=、%=、&=、 |=、 ^=、<= 、>= 、>>= |

浙公网安备 33010602011771号