1. 运算符
- 算数运算符
- 两个操作数:
+ - * / %
- 一元运算符:
++ --
递增/递减
- 两个操作数:
- 赋值运算符
= += -= *= /= %=
- 关系运算符
> < >= <= == !=
- 逻辑运算符
&& || !
- 三元运算符
expression ? result1 : result2
1.1 运算符优先级
优先级 | 运算符 | 类型 | 结合性 |
---|---|---|---|
1 | () | ||
2 | ! +(正) -(负) ++ -- | 从右到左 | |
3 | * / % | 算数运算符 | |
4 | +(加) -(减) | 算数运算符 | |
5 | << >> | ||
6 | > >= < <= | 关系运算符 | |
7 | == != | 关系运算符 | |
8 | & | 按位与 | |
9 | ^ | ||
10 | | | ||
11 | && | 逻辑运算符 | |
12 | || | 逻辑运算符 | |
13 | ?: | 条件运算符 | |
14 | = += -= *= /= %= | 赋值运算符 |
补充:
逻辑非 > 逻辑与 > 逻辑或,比如 a || b && c
等价 a || (b && c)
2. 自增和自减运算符
运算符 | 含义 |
---|---|
i++ | |
++i | |
i-- | |
--i |
3. 复合运算
前置条件 int i = 12;
计算: i -= i
计算: i -= i *= i
计算: i *= i += i -= 1
计算: i += i -= i *= 1
计算: i += i -= i *= i
4. 其他
4.1 变量相加 vs 常量相加
@Test
public void add() {
byte b1 = 1, b2 = 2, b;
// 变量相加,b1,b2 会先做类型提升(int),再运算,最后将运算结果赋给b
// 此时类型不匹配(int > byte)
b = b1 + b2;
// 常量相加,先计算结果,再赋值
b = 1 + 2;
}
4.2 数据互换
/**
* 数据互换,不引入临时变量
* 加法和异或运算
*/
public void swap() {
int x = 3, y = 5;
x = x + y;
y = x - y;
x = x - y;
// 两次都是 x-y
}
4.3 精度
@Test
public void test() {
System.out.println(1/3); // 0
System.out.println(1/3.0);
// 0.3333333333333333, 不会打印无限循环小数,在能力范围(存储空间)内打印有限长度
// boolean: true / false
System.out.println(1 < 2 );
// 缺省类型
long var = 9999999999L;
// 精度
float f = 55.1111111f;
double d = 55.1111111;
System.out.println(f);
System.out.println(d);
}
网友评论