0415运算符和分支结构
1.运算符
1.1算数运算符
开发中使用的运算符
+ - * / %取余
注意事项
1.先乘除,后加减
2.从左至右依次运算
3.小数没有取余操作
注意事项:
1.Java之中运算符顺序优先级最高的是小括号,如需调整运算顺序,直接加小括号
2.小括号内部相对于括号外部而言是一个整体,是一个【常量】
【代码规范】
“=”前后空出空格,便于阅读;
代码块之间空出空行,便于阅读。
1.2赋值运算符
//+= -= /= *= %=
以下两者等价
num1 += num2;
num1 = num1+ num2;
1.3关系运算符
关系运算符有以下几种:
> 大于 ;< 小于 ;......
【特殊】 == 等于判断 != 不等于
【注意事项】
1.关系运算符的运算结果是boolean类型:true false
2.关系运算符一般用于条件判断,数据过滤...
1.4自增自减运算
//特殊情况
int num = 6;
boolean ret = num > 5 && (num-- < 20 || num++ > 10);
System.out.println(ret);//true
/*
1.首先执行num > 5,结果成立,为true
2.执行(num-- < 20 || num++ > 10),n-- < 20成立,结果为true,断路原则后面代码不执行
3. 【待验证】 && 逻辑判断中,()的优先级是否存在?
*/
1.4.1自增自减定义
i++ / ++i 与 i-- / --i
自增自减运算【只能操作变量】,不能操作【常量】
错误范例:
int num = 5;
++(n++);//编译报错
【建议】
开发中尽量减少或者标准化使用自增自减运算符
【语法】
++ 自增运算符 操作的变量自增1 等价与 += 1
-- 自减运算符 操作的变量自减1 等价与 -= 1
【建议】
1.尽量使用 += 1 或者 -= 1 替换自增自减运算符,以减少歧义,便于阅读理解
2.如果非要使用自增自减,建议单独成行;
3.部分语言已取消自增自减操作
1.4.2自增自减含义
自增自减符号放在变量前后有不一样含义:
样例 | 含义 |
---|---|
i++(/i--) | “++”在变量后,表示变量先参与该代码行的运算,再自增(自减) |
++i(/--i) | “++”在变量前,表示变量先自增(自减),再参与该代码行的运算 |
1.4.3自增自减演示
1.4.3自增自减面试题
//面试题1
int num = 5;
int ret = num++ * ++num;
ret = ?
num = ?
/*
请问num值经历了几次自增操作?
两次,num确定最后结果为7
ret的结果从何而来?
num++
++在后,提供的数据5, num++在运行表达式中提供的数据为5
这里运算操作是一个乘以操作,num++需要执行完毕 num ==> 6
*
++num:
++在前,提供的数据6 + 1 ==> 7
最终表达式的结果为
5 * 7 = 35 ==> ret;
*/
//面试题2
int num = 5;
++(num++);//此类操作编译器会报警,因为1:自增自减操作只能作用于变量;2.小括号内部相对于括号外部是一个常量(当然,即使此处没有括号依然会报警)
num = ?;
/*
Demo7.java:5: 错误: 意外的类型
++(num++);
^
需要: 变量
找到: 值
1 个错误
同理
++num++ 也是错误的
++num结果是一个常量
(num)这个是常量还是变量呢
这个小括号是无用的!!!
(num)++这是对的
*/
1.5逻辑运算符
& && | || !
&& 同真为真,遇假则假
|| 同假为假,有真则真
&& 运算符间优先级顺序高于 ||
【短路原则】
对于 && ,当在多个条件判断过程中已经有某个条件为假,则停止判断,剩余条件不会执行
对于 || ,当在多个条件判断过程中已经有某个条件为真,则停止判断,剩余条件不会执行
开发中考虑【短路问题】可以节约计算机的性能
//& 与 &&
//&& 哪怕剩余条件中有语法错误的,编译器也会通过
//&
class logic{
public static void main(String[] args){
System.out.println( (2 > 5) & ((10/0) == 0));
}
}
Exception in thread "main" java.lang.ArithmeticException: / by zero
at logic.main(logic.java:3)
//&&
class logic{
public static void main(String[] args){
System.out.println( (2 > 5) && ((10/0) == 0));
}
}
false