运算符:
(1)算术运算符:
+,-,*,/,%,++,--
+:加法,正数,字符串连接符。
(2)赋值运算符:
=,+=,-=,*=,/=...
A:把左右两边的结果赋值给左边,左边是一个变量。
s+=2;
B:隐藏了强制类型转换
short s = 1;
s = s + 1;
short s = 1;
s += 1; //s = (short)(s+1)
(3)比较运算符:
==,!=,>,>=,<,<=
运算结果是boolean类型。
(4)逻辑运算符:
&,|,^,!,&&,||
& 逻辑与运算符: 有假则假
左边 右边 结果
true true true
true false false
false true false
false false false
| 逻辑或运算符:有真则真
左边 右边 结果
true true true
true false true
false true true
false false false
^ 逻辑异或运算符:相同则假,不同则真
左边 右边 结果
true true false
true false true
false true true
false false false
! 逻辑非运算符: 使用奇数次 结果变; 使用偶数次, 结果不变
!!(true)
!!!(true)
& 与 &&(短路与) 的区别:
&: 不管左边的结果是真还是假, 都判断右边
&&:如果左边为false,不执行右边, 结果为false
A && B && C
| 与 ||(短路或) 的区别:
|: 不管左边的结果是真还是假,都判断右边
||:如果左边为true, 不执行右边, 结果为true
A || B || C
(5)位运算符(开发中基本不用)
(6)条件运算符 :(三目运算符)
格式:(条件表达式)?表达式1:表达式2;
如果条件为true,运算后的结果是表达式1;
如果条件为false,运算后的结果是表达式2;
代码体现:
class operatorDemo {
public static void main(String[] args) {
//结果为:200
int num = (200>100)?200:100
System.out.println(num);
// 结果为:10
num = (200>100) ? ((100>50) ? 10 : 5) : 100;
System.out.println(num);
}
}
运算符的优先级(从高到低)
优先级 | 描述 | 运算符 |
1 | 括号 | ()、[] |
2 | 正负号 | +、- |
3 | 自增自减,非 | ++、--、! |
4 | 乘除,取余 | *、/、% |
5 | 加减 | +、- |
6 | 移位运算 | <<、>>、>>> |
7 | 大小关系 | >、>=、<、<= |
8 | 相等关系 | ==、!= |
9 | 按位与 | & |
10 | 按位异或 | ^ |
11 | 按位或 | | |
12 | 逻辑与 | && |
13 | 逻辑或 | || |
14 | 条件运算 | ?: |
15 | 赋值运算 | =、+=、-=、*=、/=、%= |
16 | 位赋值运算 | &=、|=、<<=、>>=、>>>= |
注意:如果在程序中,要改变运算顺序,可以使用()。
程序流程控制:
(1)判断结构:
if结构:
a:第一种结构:
if(条件表达式){
语句体;
}
执行流程:
如果条件表达式为true,执行语句体;否则,不执行。
b:第二种结构
if(条件表达式){
语句体1;
}else {
语句体2;
}
执行流程:
如果条件表达式为true,执行语句体1;
否则,执行语句体2;
c:第三种结构:
if(条件表达式1){
语句体1;
}else if(条件表达式2){
语句体2;
}else if(条件表达式3){
语句体3;
}
...
else {
语句n;
}
执行流程:
从第一个条件表达式开始判断,遇到true,就执行对应的语句体。如果都没有,最终执行语句n。
注意事项:
A:任何if语句,本身代表的是一条语句。
B:if语句控制的语句体,可以不写{}。
但是,如果if语句要控制多条语句,必须加{}。
C:条件表达式无论简单还是复杂,结果肯定是boolean类型。
D:注意,下面两个东西,一般不同时使用
;和{}
代码体现:
class IfDemo{
public static void main(String[] args) {
int age = 18;
if (age < 18) {
System.out.println("对不起,你未满18,不能报名");
} else if (age == 18) {
System.out.println("恭喜你,18岁了,可以报名啦");
} else {
System.out.println("哥们,你报名吧!");
}
}
}
switch结构:
格式:
switch(表达式) {
case 值1:
语句1;
break;
case 值2:
语句2;
break;
case 值3:
语句3;
break;
...
default:
语句n;
break;
}
执行流程:
首先计算表达式的值。
接着依次和case进行比较,遇到想等,就执行对应的语句,并结束。
如果没有匹配的,执行default。
注意事项:
a:表达式的取值一般来说是这几个:byte,short,int,char
JDK5以后可以是枚举
JDK7以后可以是字符串
b:case和default有没有顺序?
有:执行顺序关系。
没有:位置关系。
c:break是否可以不要
最后一个匹配的break可以直接不要。
d:switch语句的结束:
遇到break。
执行到最后。
代码体现:
/*
一年12月,4个季度
3\4\5 春季
6\7\8 夏季
9\10\11 秋季
12\1\2 冬季
根据指定的月份,得到对应的季节
*/
class SwitchTest {
public static void main(String[] args) {
month = 9;
switch (month) {
case 1:
case 2:
case 12:
System.out.println("冬季");
break;
case 3:
case 4:
case 5:
System.out.println("春季");
break;
case 6:
case 7:
case 8:
System.out.println("夏季");
break;
case 9:
case 10:
case 11:
System.out.println("秋季");
break;
default:
System.out.println("不是有效月份");
}
}
}