0415运算符和分支结构

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