运算符
- Java语言支持如下运算符:
- 算术运算符:+、-、*、/、%、++、–
- 赋值运算符:=
- 关系运算符:>、<、>=、<=、==、!= 、instanceof
- 逻辑运算符:&&、||、!
- 位运算符:&、|、^、~、>>、<<、>>>
- 条件运算符:?:
- 扩展赋值运算符:+=、-=、*=、/=
-
算术运算符:+、-、*、/、%
代码示例:
// 二元运算符 int a = 10; int b = 20; System.out.println(a + b);// 30 System.out.println(a - b);// -10 System.out.println(a * b);// 200 // int类型的整数相除时,结果只会保留整数部分,如果要保留小数,需要进行类型转换 System.out.println(a / b);// 0 只会保留整数部分 System.out.println(a / (double)b);// 0.5 System.out.println(a % b);// 10 取余,模运算
运行结果:
30 -10 200 0 0.5 10
-
算术运算符:++(自加)、–(自减)
- 符号在前,则先自增或自减,然后将结果赋值
- 符号在后,则先进行赋值,然后自增或者自减
代码示例:
// ++:自增 --:自减 一元运算符 // 符号在前,则先自增或自减,然后将结果赋值 // 符号在后,则先进行赋值,然后自增或者自减 int i = 3; int j = i++;// 先将i赋值给j,然后将i+1的结果赋值给i System.out.println("i=" + i + ",j=" + j);// i=4,j=3 // 此处以i=4计算 int k = ++i;// 先将i+1的结果赋值给i,然后将i赋值给k System.out.println("i=" + i + ",k=" + k);// i=5,k=3 // 此处以i=5计算 int l = i--;// 先将i赋值给l,然后将i-1的结果赋值给i System.out.println("i=" + i + ",l=" + l);// i=4,l=5 // 此处以i=4计算 int m = --i;// 先将i-1的结果赋值给i,然后i-1赋值给i System.out.println("i=" + i + ",m=" + m);// i=3,j=3
运行结果:
i=4,j=3 i=5,k=5 i=4,l=5 i=3,m=3
注:
- 不同类型的数据在做算术运算时,会先转成所拥有的最高类型,然后进行计算(short和byte类型在做算术运算时,会转成int型进行计算)
代码示例:
long c = 121212121212L;
int d = 1212;
short e = 10;
byte f = 8;
System.out.println(c+d+e+f);// 121212122442 long
System.out.println(d+e+f);// 1230 int
System.out.println(e+f);// 18 int
System.out.println(f+f);// 16 int
拓展:字符串连接(+)
- 当运算中出现 “+字符串(String)” 时,则该运算将最终会转换为字符串类型进行拼接
代码示例:
int a = 10;
int b = 20;
// 当运算中出现"+字符串"时,字符串之前的变量正常计算,然后与字符串拼接,字符串之后的变量,则直接转换为字符串进行拼接
System.out.println("" + a + b);// 1020
// 字符串前的变量正常计算,计算结果与字符串进行拼接
System.out.println(a + b + "");// 30
-
关系运算符:
- 关系运算符返回的结果是一个布尔值(true:正确,false:错误)
// 关系运算符返回的结果是一个布尔值(true:正确,false:错误) int g = 1; int h = 2; System.out.println(a > b);// false System.out.println(a < b);// true System.out.println(a == b);// false System.out.println(a != b);// true
-
拓展:很多运算需要使用一些工具类,例如幂运算
代码示例:
// 幂:Java中没有2^3(2*2*2)的写法,需要使用Math类 double pow = Math.pow(3, 2); System.out.println(pow);// 9.0
-
逻辑运算符
- &&:与(and)
- ||:或(or)
- !:非(取反)
代码示例:
// &&:与(and) ||:或(or) !:非(取反) boolean a = true; boolean b = false; // 逻辑与(&&)运算:两个变量都为真,结果为真 System.out.println("b && a:" + (b && a));// false // 逻辑或(||)运算:两个变量有一个为真,则结果为真 System.out.println("a || b:" + (a || b));// true // 逻辑非(!)运算:如果是真,则结果为假,如果是假,则结果为真 System.out.println("!(a && b):" + !(a && b));// true
-
短路运算
-
当第一个条件判断结束时,若已经能获得最终的判断结果,则不会继续做下一步判断,而是直接返回结果
代码示例:
// 短路运算: int c = 5; // (c < 4)判断结果为false,已能够确定返回结果为false。所以将不再对(c++ < 4)进行判断 boolean d = (c < 4) && (c++ < 4); System.out.println(d);// false System.out.println(c);// 5 证明(c++ < 4)并没有被执行,如果执行c的值应该为5
-
-
位运算:&、|、^、~
代码示例:
/* * 二进制数: * 0:0000 0000 * 1:0000 0001 * 2:0000 0010 * 3:0000 0011 * 4:0000 0100 * 8:0000 1000 * 16:0001 0000 * …… * * A = 0011 1100 * B = 0000 1101 * * A&B = 0000 1100 同时为1则为1,否则为0 * A|B = 0011 1101 有一个1则为1,全0为0 * A^B = 0011 0001 相同为0,相反为1 * ~B = 1111 0010 取反 * * 问题:2 * 8 怎么计算最快? 2*2*2*2 * 参考二进制的2 4 8 16 * << 左移 相当于*2 * >> 右移 相当于/2 */ // 具体代码 System.out.println(2 << 3);// 16
-
三元运算符:x ? y : z 如果x为true,则结果为y,否则结果为z
代码示例:
// x ? y : z // 如果x为true,则结果为y,否则结果为z int score = 50; String str = score < 60 ? "不及格" : "及格"; System.out.println(str);// 不及格
-
扩展赋值运算符:
代码示例:
a += b;// a = a + b; a -= b;// a = a - b; a *= b;// a = a * b; a /= b;// a = a / b;
-
java运算符的优先级
- 级别高的运算符先执行运算,级别低的运算符后执行运算
- 下表中数字越小优先级越高,()优先级最高,如果出现多个(),则按照从左到右的顺序执行
优先级 运算符 结合性 1 ()、[]、% 从左到右 2 !、+(正)、-(负)、~、++、– 从右到左 3 *、/ 从左到右 4 +(加)、-(减) 从左到右 5 <<、>>、>>> 从左到右 6 <、<=、>、>= 从左到右 7 ==、!= 从左到右 8 & 从左到右 9 ^ 从左到右 10 | 从左到右 11 && 从左到右 12 || 从左到右 13 ?: 从右到左 14 =、+=、-=、*=、/=、%=、&=、|=、^=、~=、<<=、>>=、>>>= 从右到左