第三节:运算符、判断和分支结构
目录
一、运算符
l运算符是一种特殊符号,用以表示数据的运算、赋值和比较等共分以下几种:
•算术运算符
•赋值运算符
•比较运算符
•逻辑运算符
•移位运算符
1.1算术运算符
算术运算符的注意问题
•如果对负数取模,可以把模数负号忽略不记,如:5%-2=1。但被模数是负数就另当别论。
•对于除号“/”,它的整数除和小数除是有区别的:整数之间做除法时,只保留整数部分而舍弃小数部分。
•例如:int x=3510;x=x/1000*1000; x的结果是?
•“+”除字符串相加功能外,还能把非字符串转换成字符串 。
•“+”运算符两侧的操作数中只要有一个String类型,一个是基本数据类型时,编译成class文件后,两个操作数就被连接成了一个新的String值:
•例如:System.out.println("5+5="+5+5);//打印结果是?
1.2赋值运算符
•符号:
= , +=, -=, *=, /=, %=
•示例:
int a,b,c; a=b=c =3;
int a = 3; a+=5;等同运算a=a+5;
•思考:
short s = 3;
s=s+2;
s+=2;
有什么区别?
s=s+2//编译失败,因为s会被提升为int类型,运算后的结果还是int类型。无法赋值给short类型。
s+=2//编译通过,因为+=运算符在给s赋值时,自动完成了强转操作。
1.3比较运算符
•注1:比较运算符的结果都是boolean型,也就是要么是true,要么是false。
注2:比较运算符“==”不能误写成“=”
1.4逻辑运算符
- 逻辑运算符用于连接布尔型表达式,在Java中不可以写成3<x<6,应该写成x>3 & x<6 。
- “&”和“&&”的区别:单与时,左边无论真假,右边都进行运算;双与时,如果左边为真,右边参与运算,如果左边为假,那么右边不参与运算。
- “|”和“||”的区别同理,双或时,左边为真,右边不参与运算。
- “ ^ ”与“|”不同之处是:当左右都为true时,"^"结果为false,也可以理解为两边相同为false,不同为true。
1.5位运算符
位运算符直接对二进制进行运算
位运算符 |
||
运算符 |
运算 |
范例 |
<< |
左移 |
3 << 2 = 12 --> 3*2*2=12 |
>> |
右移 |
3 >> 1 = 1 --> 3/2=1 |
>>> |
无符号右移 |
3 >>> 1 = 1 --> 3/2=1 |
& |
与运算 |
6 & 3 = 2 |
| |
或运算 |
6 | 3 = 7 |
^ |
异或运算 |
6 ^ 3 = 5 |
~ |
反码 |
~6 = -7 |
位运算符的细节 |
|
<< |
空位补0,被移除的高位丢弃,空缺位补0。 |
>> |
被移位的二进制最高位是0,右移后,空缺位补0; 最高位是1,空缺位补1。 |
>>> |
被移位二进制最高位无论是0或者是1,空缺位都用0补。 |
& |
二进制位进行&运算,只有1&1时结果是1,否则是0; |
| |
二进制位进行 | 运算,只有0 | 0时结果是0,否则是1; |
^ |
相同二进制位进行 ^ 运算,结果是0;1^1=0 , 0^0=0 不相同二进制位 ^ 运算结果是1。1^0=1 , 0^1=1 |
1.6三元运算符
三元运算:三目运算。
格式:表达式1 ? 表达式2 : 表达式3;
运算规则:
要求表达式1 运行的结果必须是一个boolean的结果。通过表达式1的这个结果确定到底是执行表达式2还是表达式3.
当表达式1为true,就把表达式2的结果作为三元运算的结果。
当表达式1为false的时候,把表达式3的结果作为三元运算的结果。
1.7运算符优先级
二、判断结构(if)
三种格式:
第一种:
if( 判断的条件 ) 这里的条件必须最后是一个boolean值
{
判断成立后应该执行的动作;
}
第二种:
if( 判断的条件 )
{
判断条件成立后执行的语句;
}
else
{
判断不成立后执行的语句;
}
第三种:
if( 判断的条件 )
{判断成立后执行的语句;}
else if( 判断的条件 )
{判断成立后执行的语句;}
else if( 判断的条件 )
{判断成立后执行的语句;}
.....
else
{上述的所有判断都不成立之后执行的语句;}
三、多分支结构(switch)
3.1switch语句格式
要求这个表达式最后必须能计算出一个准确的结果,
并且这个结果的类型只能是 byte short int char ,在JDK5 增加了 枚举类型 在JDK7增加了字符串类型
switch( 表达式 )
{
case 常量1:语句;break;
case 常量2:语句;break;
case 常量3:语句;break;
case 常量4:语句;break;
........
default :语句;break;
}
3.2、代码演示
//演示Switch的执行过程
class SwitchDemo
{
public static void main(String[] args)
{
int a = 4;
switch( a % 2 )
{
case 0:
System.out.println("a是偶数");
break;
case 1:
System.out.println("a是奇数");
break;
default:
System.out.println("没这样的奇偶数");
break;
}
System.out.println("Hello World!");
}
}
3.3、switch语句执行顺序
switch语句在执行的时候,JVM是通过switch中的表达式的计算结果和case后面的常量进行比较,相等就代表找到的执行switch后面case的入口,这时如果程序没有break关键字,这时JVM就会把从入口开始往下的所有代码,全部执行,而不管下面的case 后的常量是否和计算的结果一致。
3.4、switch练习
//需求:根据指定的天数,打印星期。
class SwitchTest
{
public static void main(String[] args)
{
int day = 11;
switch( day )
{
case 1:
System.out.println("星期一");
break;
case 2:
System.out.println("星期二");
break;
case 3:
System.out.println("星期三");
break;
case 4:
System.out.println("星期四");
break;
case 5:
System.out.println("星期五");
break;
case 6:
System.out.println("星期六");
break;
case 7:
System.out.println("星期日");
break;
default:
System.out.println("没有对应的星期,请回火星!!!");
break;
}
System.out.println("Hello World!");
}
}
3.5、if和switch的区别
if和switch可以互换,但是if它主要完成的条件的判断,switch主要是对数据的结果分支执行。
if可以在条件中书写判断的区间,而switch只能接受固定类型的数据,最后还要求必须是常量。
需要掌握:
- 算术运算:% ++ --
- 关系运算中的 == 和 赋值的 = 的区别
- 逻辑运算中的 && & 和 || | 的区别
- 掌握怎么交换两个空间中的值
- 掌握if的三种结构使用。