Java运算符大体与C语言一致,部分有语言特点
算数运算符
基本四则运算(+、-、*、/)
int a = 20;
int b = 10;
System.out.println(a + b); // 30
System.out.println(a - b); // 10
System.out.println(a * b); // 200
System.out.println(a / b); // 2
System.out.println(a % b); // 0 --->模运算相当于数学中除法的余数
注意:
- 都是二元运算符,使用时必须要有左右两个操作数
- int / int 结果还是int类型,而且会向下取整(同C语言)
- 除法,取模右操作数不能取0
- 取模可以对浮点数取(意义不大)
System.out.println(11.5 % 2.0);
// 运行结果
1.5
- 操作数类型不同,会类型提升
增量运算符(+=、-+、*=、/=)
可以发生整型提升
short a=1;
a=a+1; //报错,1为int型,类型提升为int
//修改
a=(short)(a+1);
a+=1; //正确
注意:只有变量才能使用该运算符,常量不能使用。
自增/自减运算符(++、--)
同C语言(详细可看C初阶)
关系运算符
关系运算符主要有六个: == != < > = ,其计算结果是 true 或者 false 。
int a = 10;
int b = 20;
// 注意:在Java中 = 表示赋值,要与数学中的含义区分
// 在Java中 == 表示相等
System.out.println(a == b); // false
System.out.println(a != b); // true
System.out.println(a < b); // true
System.out.println(a > b); // false
System.out.println(a <= b); // true
System.out.println(a >= b); // false
注意:当需要多次判断时,不能连着写,比如:3 < a < 5,Java程序与数学中是有区别的
逻辑运算符
逻辑运算符主要有三个: && || ! ,运算结果都是 boolean类型。
逻辑概念,短路求值同C语言,左右表达式必须为boolean
位运算符
位运算符主要有四个: & | ~ ^ ,除 ~ 是一元运算符外,其余都是二元运算符
注意: 当 & 和 | 的操作数为整数(int, short, long, byte) 的时候, 表示按位运算, 当操作数为 boolean 的时候, 表示 逻辑运算
移位运算符
移位运算符有三个: > >>> ,都是二元运算符,且都是按照二进制比特位来运算的。
1. 左移 : 最左侧位不要了, 最右侧补 0.
int a = 0x10;
System.out.printf("%x\n", a << 1);
// 运行结果(注意, 是按十六进制打印的)
20
注意:向左移位时,丢弃的是符号位,因此正数左移可能会编程负数。
2. 右移 >>: 最右侧位不要了, 最左侧补符号位(正数补0, 负数补1)
int a = 0x10;
System.out.printf("%x\n", a >> 1);
// 运行结果(注意, 是按十六进制打印的)
8 i
nt b = 0xffff0000;
System.out.printf("%x\n", b >> 1);
// 运行结果(注意, 是按十六进制打印的)
ffff8000
3. 无符号右移 >>>: 最右侧位不要了, 最左侧补 0
int a = 0xffffffff;
System.out.printf("%x\n", a >>> 1);
// 运行结果(注意, 是按十六进制打印的)
7ffffff
注意:
1. 左移 1 位, 相当于原数字 * 2. 左移 N 位, 相当于原数字 * 2 的N次方.
2. 右移 1 位, 相当于原数字 / 2. 右移 N 位, 相当于原数字 / 2 的N次方.
3. 由于计算机计算移位效率高于计算乘除, 当某个代码正好乘除 2 的N次方的时候可以用移位运算代替.
4. 移动负数位或者移位位数过大都没有意义
条件运算符
同C语言
表达式1 ? 表达式2 : 表达式3;
注意:
1. 表达式2和表达式3的结果要是同类型的,除非能发生类型隐式类型转换。
int a = 10;
int b = 20;
int c = a > b? 1 : 2.0;
2. 表达式不能单独存在,其产生的结果必须要被使用
int a = 10;
int b = 20;
a > b? a : b; // 报错:Error:(15, 14) java: 不是语句
注意:运算符之间是有优先级的. 具体的规则我们不必记忆. 在可能存在歧义的代码中加上括号即可
最难不过坚持!