算术运算符:+ - * / % ++ –
以++为例:
int m = 10; int n = m++; //可以理解为先把m赋给n,再让m的值 + 1 int x = 10; int y = ++x; //可以理解为 先进行自加1 再进行赋值
其实++运算使得变量立刻+1,只是i++取的是加之前的值,++i取的是加之后的值
引例:
int i = 10; i = i++; System.out.println(i); //这时i的值还是10
因为Java在执行这种表达式的时候,会提前将i找一个临时变量存储,就等同于以下代码:
int i = 10; int temp = i; i++; i = temp;关系运算符
> >= < <= == !=
所有关系运算符的结果都是布尔类型
逻辑运算符& | ! && ||
逻辑运算符的两边都是布尔类型,并且结果也是布尔类型
- & 只有两边的结果都是true的时候,结果才是true; 并且如果左边是false的话右边表达式还是会继续执行
- && 如果左边表达式的结果是false 的话,右边的表达式就不会执行
- || 同理。
int x = 10, y = 11;
System.out.println(x > y & x > y++);//左边的结果已经是false了,但是右边的表达式还会执行
System.out.println(y);//结果是12
int m = 10, n = 11;
System.out.println(m > n & m > n++);//左边的结果是false了,右边的表达式就不会执行了
System.out.println(n);//结果是11
扩展赋值运算符
+= -= *= /= %=
- 扩展运算符永远不会改变运算结果的类型
x += 1; x = (byte)(x + 1);
这两条语句实际上是等价的,扩展赋值运算符会自动进行强制类型转换
引例:
byte x = 100; x = x + 1; x += 1; //这样做就没有任何问题,自动进行强制类型转换,这也证明了上述结论 x += 199; //这已经超过了byte类型的取值范围,但是还不会报错;强制类型转换会自动损失精度条件运算符
布尔表达式 ? 表达式1 : 表达式2;
布尔表达式为true时,选择第一个表达式执行;为false时选择第二个表达式执行
boolean sex = true; char c = sex ? '男' : '女' ;//最终的结果时字符类型,就需要用字符型变量进行接收字符串连接运算符
+在Java中有两个作用:
- +两边都是数字类型时,进行求和
- 任意一边是字符串类型时,进行字符串拼接,得到的结果还是字符串
在一个表达式中有多个 + 时,按照自左向右的顺序进行执行
System.out.println(a + b + "110");
先计算a + b ,得到300 + "110"再进行字符串拼接,结果是300110



