一、运算符
1.算数运算符
+ - * / %
2.自增自减运算符
++ 变量中的值+1 --变量中的值-1
++和--既可以放在变量的前面,也可以放在变量的后面
++和--放在变量的前边或者后边,单独写一行结果是一样的
int a = 10;
//先用后加 先将a的值赋给b然后a在自增
int b = a++
//b = 10
int a = 10;
//先加后用 先将a的值自增,在赋值给b
int b = ++a;
// b = 11
3.windows运行顺序
前缀优先于后缀,前缀统一自增/自减,然后运算完在把结果拿过来用
int i = 10;
++i + ++i; // 12 + 12 = 24
// 第一个i先加1 然后 后面的++i 再加1 10+1+1=12
后缀统一先用,当整个表达式中变量用完了,在进行自增
int i = 10;
i++ + i++; // 10 + 10 = 20
// 先用i的值运算,运算完了在自增 10+1+1 = 12
例题
int i = 10;
int j = 5;
int k = i++ + ++i - --j - i--
/*
先算前缀++和--
++i = 11
--j = 4
再用运算完的值算表达式
11 + 11 - 4 - 11 = 7
运算完表达式在运算后缀++和--
i++ = 12 i--=11
运算完之后i=11
*/
4.mac/linux运行顺序
前缀和后缀的优先级是一样的
从左到右依次计算
每一个前缀和后缀都是一个独立的个体
int i = 10;
int j = 5;
int k = i++ + ++i - --j - i--
/*
10 + 12 - 4 -12 = 6
i++ 先用后加 10+1=11
++i 先加再用 11+1=12
--j 先减在用 5-1=4
i-- 先用再减,运算完表达式的时候 i=11
*/
5.赋值运算符
= += -= *= /= %=
= 直接赋值
+= 加后赋值
-= 减后赋值
*= 乘后赋值
/= 除后赋值
%= 取余赋值
6.关系运算符
== != > >= < <=
7.逻辑运算符
! && ||
&&与(而且) 两边都为真,结果才为真
|| 或(或者) 两边都为假,结果才是假
&&和||都具有短路效果,当左边的表达式能确定整个表达式的结果了,右边不参与运算直接跳过
8.三元运算符
格式:关系表达式 ? 表达式1 : 表达式2;
执行流程 关系表达式为真,执行表达式1 为假 执行表达式2
9.逗号运算符(分隔符)
规则:
1.从左到右
2.最后一个子表达式的结果,是整个表达式的结果
3,优先级最低(永远是最后执行)
10.运算符的优先级
小括号优先于所有
一元>二元>三元
&& > || > 赋值运算符
11.三元运算符嵌套解题关键
ps:师承黑马程序员阿玮老师(doge)
从左边的第一个问号开始往后找冒号,如果过程中遇到了其他问号,那么找冒号的数量加1,冒号前面所有代码是表达式1,后面是表达式2
二、类型转换
计算时,数据类型不一样不能直接运算,需要转成一样的,才能运算
1.隐式转换
把一个取值范围小的,转成取值范围大的
规则1:取值范围小的,和取值范围大的计算,小的会自动提升为大的,再进行运算
规则2:short char类型的数据在运算的时候,先提升为int,再进行运算
2.强制转换
如果把取值范围大的,赋值给取值范围小的,就需要进行强制转换
格式:目标数据类型 变量名=(目标数据类型)被强制转换的数据;
取值范围:char<short<int<long<long long<float<double
什么时候转换:
大的赋值给小的时候,需要强制转换
格式:
想转什么类型,就在前面的小括号中写什么类型即可
强制转换的弊端:
有可能导致数据错误