对字面量或变量进行操作的符号
算数运算符
加、减、乘、除、取模/取余
符号 | 作用 | 说明 |
---|---|---|
+ | 加 | + |
- | 减 | - |
* | 乘 | * |
/ | 除 | 取结果的商 |
% | 取模、取余 | 取结果的余数 |
在代码中,如果有小数参与计算,那么它的结果有可能是不精确的,这里涉及到了小数在计算机中的存储模式
加法的高级用法
数字相加
数据类型不一样不能运算,需要转成一样的才能运算,需要用到类型转换,分为隐式转换和强制转换
- 隐式转换(自动类型提升):
a. 取值范围小的 > 取值范围大的
b.byte
、short
、char
三种类型在运算时都会先提升为int
,然后再进行运算 - 强制转换:取值范围大的 > 取值范围小的,不允许直接赋值的
a. 格式:目标数据类型 变量名=(目标数据类型) 被强转的数据
b. 如果数据比较大,那么在强转的时候就会发生错误
public class Demo1 {
public static void main(String[] args) {
// 隐式转换
int a=10;
double b = 12.3;
double c = a+b; // 此处c为double类型
byte e = 1;
byte d = 3;
int s = e+d; // 此处s为int类型
// 强制转换
int f = 300;
byte k = (byte) f; // 出错,越界了
}
}
字符串相加
- 当
+
操作中出现字符串时,就是字符串连接符了,会将前后的字符串拼接,产生新的字符串 - 连续的
+
操作,从左到右逐个执行
字符相加
- 当 字符+字符或字符+数字,会把字符通过ASII表查询到对应的数字再进行计算
a
-97
自增自减运算符
符号 | 作用 | 说明 |
---|---|---|
++ | 加 | 变量的值加1 |
– | 减 | 变量的值减1 |
单独使用
a++和++a单独写一行时是一样的效果
参与运算
运算1:先用后加
int a=10;
int b=a++; // b = 10, a = 10+1=11
运算2:先加后用
int a=10;
int b=++a; // a = 10+1=11, b = 11
赋值运算符
符号 | 作用 | 说明 |
---|---|---|
= | 赋值 | int a=10 |
+= | 加后赋值 | a+=b, 即a=a+b |
-= | 减后赋值 | a-=b |
*= | 乘后赋值 | a*=b |
/= | 除后赋值 | a/=b |
%= | 取余后赋值 | a%=b |
关系运算符
符号 | 说明 |
---|---|
== | a==b, a和b是否相等,成立为true,否则为false |
!= | a!=b,a和b是否不等 |
> | a>b |
>= | a>=b |
< | a<b |
<= | a<=b |
关系运算符的结果都是boolean
类型
逻辑运算符
符号 | 作用 | 说明 |
---|---|---|
& | 逻辑与(且) | 并且,都为真则为真,其余为假 |
| | 逻辑或 | 或者,都为假则为假,其余为真 |
^ | 逻辑异或 | 相同为false,不同为true |
! | 逻辑非 | 取反 |
短路逻辑运算符
符号 | 作用 | 说明 |
---|---|---|
&& | 短路与(且) | 结果和&相同,但是有短路效果, 左边为false,右边不管真假,表达式一定是false |
| | | 短路或 | 结果和 | 相同,但是有短路效果,左边为true,右边不管真假,表达式一定是true |
具有短路效果,当左边的表达式能确定最终的结果,那么右边就不会运行了
int a = 10;
int b = 20;
boolean res = ++a < 5 && ++b < 5; // 只要确定了左边不满足,则返回false,不用再计算右边了
System.out.println(res); // false
System.out.println(a); // 11
System.out.println(b); // 20
最常用逻辑运算符:&&
、||
、!
三元运算符
格式:关系表达式 ? 表达式1 : 表达式2
含义:关系表达式满足,就执行表达式1,否则执行表达式2
示例: res = a > b ? a : b
,如果a>b,就返回a,否则返回b