1、算数运算符
一个表达式中有多个运算符,运算符有优先级,不确定的加小括号
+ 求和
- 相减
* 相乘
/ 商
% 求余数【取模】
++ 自加1
-- 自减1
//举例
int k = 10;
k++; // 11
int y = 10;
++y; // 11
// 小结: ++无论在变量前面还是后面,只要是++运算结束,该变量的值一定加1
// ++ 在变量后,先赋值,后变量自加1
int a = 10;
int b = a ++; // a=11; b=10
//因为=优先于++。所以先进行 b = a 赋值, a再自加1
// ++在变量前,先自加1,再赋值
int m = 10;
int n = ++ m; // m=11; n=11
int xx = 50;
System.out.println(xx); //控制台显示的是字符串 50 , int型50转字符串型50,库里有个printString转换的。也就是包含以下一段代码:
public void println(int x){
Synchronized (this){
print(x);
newLine();
}
}
int e = 100;
System.out.println(e++); // 100
System.out.println(e); //101
因为:
public void println(int x = e ++){ //++在后,先赋值,后自加1
Synchronized (this){
print(x);
newLine();
}
}
同理可得:
int s = 100;
System.out.println(++s); // 101
System.out.println(s); //101
2、关系运算符
>
>=
<
<=
==
!=
关系运算符的运算结果一定是布尔类型:true/false
3、逻辑运算符
& 逻辑与
| 逻辑或
! 逻辑非
^ 逻辑异或 (两边的算子只要不一样就是true)
&& 短路与
|| 短路或
1、逻辑运算符要求两边的算子都是布尔类型,并且逻辑运算符运算结果也是布尔类型
2、短路与/或 和 逻辑与/或 的运算结果是相同的,只是短路与 存在短路现象
3、什么时候发生短路?
4、什么时候选择短路与 什么时候选择逻辑与?
//执着的逻辑与,两边算子都运算执行
int x = 10;
int y = 8;
System.out.println(x<y & ++x <y); // &前面x<y已经是false,整个运算结果是false,那么按理说后面的 ++x < y不需要执行
System.out.println(x); // 11 但是,x = 11,说明后面的 ++x < y 执行了
//相同代码测试
//机智的短路与,后面的表达式可能不执行,效率更高,实际开发中短路与比逻辑与使用的多
int x = 10;
int y = 8;
System.out.println(x<y && ++x <y); // &前面x<y已经是false,那么按理说后面的 ++x < y不需要执行,整个运算结果是false
System.out.println(x); // 10 说明后面的表达式没有运算
//所以我们说这种现象是短路现象
什么情况发生短路与?
第一个算子表达式执行false
什么情况下发生短路或?
第一个算子表达式执行true
4、赋值类运算符
基本的赋值运算符
=
扩展的赋值运算符
+=
-=
*=
/=
%=
1、赋值类运算符优先级:先执行等号右边的表达式,将执行结果赋值给左边的变量
2、扩展类运算符不改变运算结果的类型,底层用的强制类型转换
i = i+5;
i += 5;// 等同于 i = i +5
i -=5; // i = i - 5;
//------------------------------------------------
byte b = 10;
b = b + 5; //编译器检查语法,编译器发现 b+5是int 类型,但是b是byte类型,大容量向小容量转换需要强制类型,所以这里报错
b = (byte)(b + 5); //纠错
byte x = 10;
x += 5; // 15; 这里不报错
说明 x += 5 等同于 x = (byte)(x + 5) ; 并不是等同于 x = x+5
byte z = 0;
z += 128; //-128【损失精度】; 等同于 z = (byte)(z + 128);
z +=10000; //-112; 等同于 z = (byte)(z + 10000);
5、字符串连接运算符
java中的 + 运算符
1、求和 数字 + 数字 = 数字
2、字符串的连接运算,运算结果还是字符串 数字 + “字符串” = “字符串”
10 + 20 + “30”; //自左向右运算; 3030
int a = 10;
int b = 20;
System.out.printfln("10 + 20 = "+a+b); //"10 + 20 = 1020"
6、三目运算符/三元运算符/条件运算符
语法规则:
布尔表达式 ? 表达式1 : 表达式2
布尔表达式为true,选择 表达式1作为整个表达式的执行结果
布尔表达式为false,选择 表达式2作为整个表达式的执行结果